我想用std::stringstream
创建格式化字符串,但使用内联类,所以我没有stringstream
局部变量到处乱飞。我的意思是这样的:
#include <iostream>
#include <ostream>
#include <string>
#include <sstream>
int main(int argc, char* argv[])
{
std::string test = ((std::ostringstream&)
(std::ostringstream("") << "This is a test: " << 50.1 << "abc")
).str();
std::cout << test << std::endl;
return 0;
}
这在 GCC 中编译得很好,但输出如下:
“0x401d0a50.1abc”
所以看来stringstream
将第一个字符串视为指针并输出地址。随后的operator<<
工作正常。
我该如何解决?
谢谢!
原因是,<<
操作员是以下组织的成员void const*
,但是一个自由函数std::ostream&
作为左手参数char const*
. Your std::ostringstream( "" )
是临时的:可以在其上调用成员函数(甚至非常量成员函数),但临时不能用于初始化全局函数的非常量引用。
EDIT:
两点:首先,正如已经指出的,g++ 确实做了你想做的事
如果你指定的话想要-std=c++11
。作为 T.C.指出,这是
§27.7.3.9 中指定,它提供了模板重载
全部<<
带有右值引用std::istream
范围。
其次,经典的解决方法是
开始表达std::ostringstream( "" ).flush() <<...
. flush
是一个成员函数(因此可以调用
一个临时的),它返回一个std::ostream&
(所以一切
否则链得很好);它也没有做任何事
Astd::ostringstream
.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)