关于cout<<的问题。
#include <iostream>
#include <string>
using namespace std;
string make(size_t,string &str_a)
{
string str="wds";
str_a=str;
return str_a;
}
int main(int argc,char **argv)
{
string str("asd");
//cout<<atoi(argv[1])+atoi(argv[2])<<endl;
cout<<str<<endl;
cout<<make(1,str)<<endl<<str<<endl;
/*cout<<str<<endl<<make(1,str)<<endl<<str<<endl;*/
//把两个cout和在一起输出和分开输出,为什么第一个str的值不一样??
return 0;
}
[解决办法]
我想:这是因为cout的<<的运算顺序是从右向左的,把能打印的全保存起来,直到遇到cout后一气呵成执行打印输出。
对于合在一起打印的情况,你要打印的3个str其实都是一个,因为make函数参数你用的是引用,str在make的改变被带回了;在要打印的时候,str已全变成wds。
cout <<str <<endl <<str <<endl<<str <<endl <<str <<endl <<str <<endl <<str <<endl <<str <<endl <<make(1,str) <<endl ;
结果仍然全是:wds。
[解决办法]
#include <iostream >
#include <string >
using namespace std;
string make(size_t,string &str_a)
{
string str="wds";
str_a=str;
return str_a;
}
int main(int argc,char **argv)
{
string str("asd");
//cout < <atoi(argv[1])+atoi(argv[2]) < <endl;
cout < <str < <endl;
cout < <make(1,str) < <endl < <str < <endl;
/*cout < <str < <endl < <make(1,str) < <endl < <str < <endl;*/
//把两个cout和在一起输出和分开输出,为什么第一个str的值不一样??
return 0;
}
分开的情况:因为C++中的输入输出流都有缓冲区,只有当输出缓冲区满了或cout语句后面有endl或'\n'时会将缓冲区中的数据输出到界面上来。
合在一起的情况:引用和被引用的变量在内存中占同一段内存空间,如果引用改变了,那么被引用的变量也要作相应的改变。