| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 689 人关注过本帖
标题:为什么两个看起来很相似的函数,却是一个必须有const,另一个又绝对没有con ...
只看楼主 加入收藏
icedge
Rank: 1
等 级:新手上路
帖 子:27
专家分:0
注 册:2007-5-13
收藏
 问题点数:0 回复次数:3 
为什么两个看起来很相似的函数,却是一个必须有const,另一个又绝对没有const,否则
*******程序1**************************************

#include<iostream>
#include<vector>
#include<fstream>
#include<sstream>
using namespace std;
typedef vector<char>str;
str input();
void output(str&a);
int main(){
str a=input();
output(a);
system("pause");
}
vector<char>input(){
ifstream in("a.txt");
str a;
for(string s;getline(in,s);){
istringstream sin(s);
for(char b;sin>>b;)
a.push_back(b);
}
return a;
}
void output(str&a){/////不能加const
for(int i=0;i<a.size();i++)
cout<<a[i];
}

**********程序2************************************

#include<iostream>
#include<fstream>
#include<sstream>
#include<vector>
using namespace std;

typedef vector<vector<int> >mat;
mat input();
void mysort(mat&a);
void print(const mat&a);

int main()
{mat a=input();
mysort(a);
print(a);
system("pause");
}

mat input()
{ifstream in("aaa.txt");
mat a;
for(string s;getline(in,s);)
{vector<int>b;
istringstream sin(s);
for(int ia;sin>>ia;)
b.push_back(ia);
a.push_back(b);
}
return a;
}

void mysort(mat&a)
{for(int pass=1;pass<a.size();++pass)
for(int i=0;i<a.size()-pass;++i)
if(a[i+1].size()<a[i].size()) a[i].swap(a[i+1]);
}

void print(const mat&a)//////////这里的const又必须保留
{for(int i=0;i<a.size();++i){
for(int j=0;j<a[i].size();++j)
cout<<a[i][j]<<" ";
cout<<endl;
}
}
有问题的地方我已经用汉语标出来了,为什么看起来很接近的两个函数却是一个必须有const才能编译而另一个却是必须去掉const才是正确的?我是初学c++,也许这个问题太低级了,希望高手不吝赐教。
搜索更多相关主题的帖子: const str 函数 vector include 
2007-05-13 20:04
yuyunliuhen
Rank: 6Rank: 6
等 级:贵宾
威 望:20
帖 子:1435
专家分:0
注 册:2005-12-12
收藏
得分:0 
以下是引用icedge在2007-5-13 20:04:14的发言:
*******程序1**************************************

#include<iostream>
#include<vector>
#include<fstream>
#include<sstream>
using namespace std;
typedef vector<char>str;
str input();
void output(const str&a);
int main(){
str a=input();
output(a);
system("pause");
}
vector<char>input(){
ifstream in("a.txt");
str a;
for(string s;getline(in,s);){
istringstream sin(s);
for(char b;sin>>b;)
a.push_back(b);
}
return a;
}
void output( const str&a){/////不能加const
for(int i=0;i<a.size();i++)
cout<<a[i];
}

**********程序2************************************

#include<iostream>
#include<fstream>
#include<sstream>
#include<vector>
using namespace std;

typedef vector<vector<int> >mat;
mat input();
void mysort(mat&a);
void print( mat&a); //去掉const

int main()
{mat a=input();
mysort(a);
print(a);
system("pause");
}

mat input()
{ifstream in("aaa.txt");
mat a;
for(string s;getline(in,s);)
{vector<int>b;
istringstream sin(s);
for(int ia;sin>>ia;)
b.push_back(ia);
a.push_back(b);
}
return a;
}

void mysort(mat&a)
{for(int pass=1;pass<a.size();++pass)
for(int i=0;i<a.size()-pass;++i)
if(a[i+1].size()<a[i].size()) a[i].swap(a[i+1]);
}

void print( mat&a)//////////去掉const
{for(int i=0;i<a.size();++i){
for(int j=0;j<a[i].size();++j)
cout<<a[i][j]<<" ";
cout<<endl;
}
}

和你函数声明有关啊,把程序改一下,也还是一样的


Go confidently in the  directions of your dreams,live the life you have imagined!Just do it!
It is no use learning without thinking!
2007-05-13 20:39
raulxxyuer
Rank: 1
等 级:新手上路
威 望:1
帖 子:178
专家分:0
注 册:2007-4-23
收藏
得分:0 

我很沒用,總是學不會遺忘,總是學不會割捨本不屬於我的東西。
2007-05-13 21:41
icedge
Rank: 1
等 级:新手上路
帖 子:27
专家分:0
注 册:2007-5-13
收藏
得分:0 
第二个程序是我从书上直接抄下来的,我只是盯着函数本身看了,没注意前面的函数声明。非常感谢2楼对我这样初级的问题也能耐心回答。
2007-05-13 22:18
快速回复:为什么两个看起来很相似的函数,却是一个必须有const,另一个又绝对没 ...
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.015042 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved