繁体   English   中英

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

[英]Why do compilers now accept to call str() member on a returned std::ostream& from std::stringstream::operator<<()?

考虑以下行:

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

这不应该编译,因为std::stringstream::operator<<()std::ostream继承并返回一个没有str()成员的std::ostream&

似乎主要的编译器现在接受了过去不接受的代码。 我想了解为了编译而发生了什么标准变化?

我用gccclangmsvc做了一些测试,我可以找到发生变化的版本:

编译器 拒绝直到(版本) 接受来自(版本)
GCC 11.1 11.2
Clang 12.0.1 13.0.0
MSVC v19.14 v19.15

你可以在这里找到测试

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

右值重载在 C++11 中引入,并返回相同类型的 stream 作为其左操作数。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM