为什么两个看起来很相似的函数,却是一个必须有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++,也许这个问题太低级了,希望高手不吝赐教。