当前位置: 首页 > 知识库问答 >
问题:

为什么编译器现在接受在返回的 std 上调用 str() 成员::ostream

娄阳舒
2023-03-14

考虑以下行:

std::string s = (std::stringstream() << "foo").str();

这不应该编译,因为< code>std::stringstream::运算符

似乎主要编译器现在接受了过去没有接受的这段代码。我想了解发生了什么标准更改来编译它?

我用gcc、clang和msvc做了一些测试,我可以找到发生变化的版本:

你可以在这里找到测试

共有1个答案

周伟泽
2023-03-14

他们都很晚才添加右值重载(见这里)。

右值重载是在C 11中引入的,它返回与左操作数相同类型的流。

 类似资料:
  • 在上调用时: gcc和clang都在std::数组的排序上返回一个错误——clang说 错误:使用未声明的标识符“sort”;你是说“性病::分类”吗? 更改为解决了这个问题。 MSVC按编写的方式编译上面的代码。 为什么和在治疗上存在差异;哪个编译器是正确的?

  • 在过去的几个月里,我一直在学习C语言并使用终端。我的代码使用g和c11编译并运行得很好,但在过去几天里它开始出现错误,此后我在编译时遇到了问题。我唯一可以编译和运行的程序依赖于旧的C标准。 我第一次遇到的错误包括 尝试使用ecg$g-o stoi_试验stoi_试验编译。cpp-std=c 11 大堆cpp:13:22:错误:命名空间“std”中没有名为“stoi”的成员;你是说“阿托伊”吗?in

  • 问题内容: 使用的方法引用具有返回类型。但是在下面的示例中,允许不兼容。 如何解决方法声明以确保方法引用类型安全而无需手动强制转换? 用例:类型安全但通用的Builder。 我尝试实现没有注释处理(自动值)或编译器插件(lombok)的通用生成器 问题答案: 在第一个例子,并帮助解决通用参数,并以和分别。 除非您明确声明,否则它并不总是a ,这将导致编译时错误,如第二个示例所示。

  • 问题内容: 服务器已创建一个套接字并绑定到端口,并启动了一个正在循环以接受连接的线程。有时由于异常导致线程退出而退出了稍后的循环,但是套接字仍然绑定到端口。现在,如果客户端与该服务器建立“连接”,则说明连接成功。这怎么可能?如果我理解正确,则仅当服务器在侦听套接字上执行“接受”操作后,“连接”才返回。我在这里想念什么吗? 问题答案: 如果我理解正确,则仅当服务器在侦听套接字上执行“接受”操作后,“

  • 如果变量是易变的,那么显然没有任何优化是适用的。在我的情况下是什么阻止了它? 下面是编译器资源管理器中的代码。

  • 我只有配置和Spring Security性 登录实现UserDetailsService loginUser用于会话信息 谢谢你阅读。