您的位置:首页 > 其它

字符串流stringstream无法正确接收字符串,而是接收了字符串的地址 -- 永远不要直接用类的成员

2016-04-22 10:51 399 查看
#include <iostream>

#include <sstream>

using namespace std;

class CTest

{

public :

~CTest()

{

cout << "Clear : " << m_ss.str() << ", size = " << m_ss.str().size() << endl;

}

stringstream & Stream()

{

return m_ss;

}

stringstream m_ss;

};

int main()

{

CTest().Stream() << "hello world !" << endl;

cout << "===========================================" << endl;

CTest().m_ss << "hello world !" << endl;

return 0;

}

通过代码可以看出来,主函数中第一行调用,是利用Stream接口来返回字符串流成员m_ss;而主函数中的第二次调用,是直接调用字符串流成员m_ss。

表面上看没有什么区别,甚至有人认为第一次调用是多此一举,何必多写一个接口?

但是事实上区别是非常大的,第一种才是正确的调用方式,第二次调用是有非常大的风险的,运行结果如下:





当然,在使用C++11的标准来编译的时候,两种写法都没有问题。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: