我无法理解 Visual Studio 2013 的编译器错误(Xcode 6.2 编译时):
以下示例代码是格式转换的抽象、简化摘录:
#include<sstream>
void main(...){
(std::ostringstream()<<0).str();
}
编译以下版本时:
#include<sstream>
void main(...){
(std::ostringstream()).str();
}
上下文:
std::string result=(std::ostringstream()<<value).str();
我在这里错过了什么? 谢谢!
最佳答案
错误信息是error C2039: 'str': is not a member of 'std::basic_ostream<char,std::char_traits<char>>'
.它在提示 str
在 std::basic_ostream<char,std::char_traits<char>>
中丢失又名 std::ostream
, 不是 std::ostringstream
.
std::ostringstream
的 operator<<
仍然返回 std::ostream&
(它从 std::ostream
继承了这些运算符),它没有 str()
成员(member)。
Clang/libc++(这是 Xcode 使用的)在其右值流插入运算符中实现了一个扩展
- 与继承成员
operator<<
相比,使其更适合右值流和 - 按原样返回对流的引用,不转换为
std::ostream&
.
这使您的代码可以在 Xcode 中编译。
调用.str()
,您可以手动 static_cast
(std::ostringstream()<<value)
返回std::ostringstream&
(使用 std::ostringstream &&
或 const std::ostringstream&
以获得 libc++ 兼容性,因为它的右值流插入运算符返回流的右值引用)。
关于c++ - Visual Studio : "str() is not a member of std::ostringstream",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29744622/