c++ - Visual Studio : "str() is not a member of std::ostringstream"

标签 c++ visual-studio stl std ostringstream

我无法理解 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>>' .它在提示 strstd::basic_ostream<char,std::char_traits<char>> 中丢失又名 std::ostream , 不是 std::ostringstream .

std::ostringstreamoperator<<仍然返回 std::ostream& (它从 std::ostream 继承了这些运算符),它没有 str()成员(member)。

Clang/libc++(这是 Xcode 使用的)在其右值流插入运算符中实现了一个扩展

  1. 与继承成员 operator<< 相比,使其更适合右值流和
  2. 按原样返回对流的引用,不转换为 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/

相关文章:

C++:取消引用实际上在做什么?

c++ - 传递给CPP中的函数时{}是什么?

c++ - std::unordered_set 和 std::vector 之间的多态性?

c++ - 顺序序列容器或如何打包 vector

c++ - 无法读取已保存的TensorFlow模型(无法查找标题条目)

c++ - 一个空队列需要多少字节?

visual-studio - ASP.NET Core启动设置:IIS Express,IIS,项目,可执行文件

visual-studio - 让 Visual Studio 2015 识别 Doxygen 注释

Java 还是 C++ 适用于我特定的基于代理的模型 (ABM)?

c++ - 使用 Visual Studio 2013 直接从 std::ostringstream 获取 const char * 时出现意外结果