首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

关于cout<<的有关问题

2012-03-21 
关于cout的问题。#include iostream#include stringusing namespace stdstring make(size_t,string

关于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'时会将缓冲区中的数据输出到界面上来。
合在一起的情况:引用和被引用的变量在内存中占同一段内存空间,如果引用改变了,那么被引用的变量也要作相应的改变。

热点排行