字符串流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的标准来编译的时候,两种写法都没有问题。
#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的标准来编译的时候,两种写法都没有问题。
相关文章推荐
- 获取actionBar 的高度,状态栏高度,view.getLocationxxx()的总结
- mac邮件中转发出现乱码
- selenium webdriver的各种driver
- [Tomcat]配置静态资源的访问
- cnetos7安装mysqlsla
- visual studio 编辑器窗口分屏
- 如何用sitemesh---------- 装饰模式
- C++第三次实验
- Java集合类Map与MapEntry学习
- insert 数据从select中来
- test
- php中的位运算符
- token app
- iOS中使用RSA加密
- C#委托
- thinkPHP3.1验证码的简单实现方法
- fragment使用琐记
- 性能测试负载模型(八)
- 成员函数指针使用
- 知道这20个正则表达式,能让你少写1,000行代码