繁体   English   中英

为什么c ++在返回本地std :: stringstream时不使用RVO?

[英]why doesn't c++ uses RVO when returning local std::stringstream?

我已经阅读了很多关于rvalue和在C ++中返回局部变量的信息> = 11.据我所知,“只是按值返回,不要使用move / forward而不添加&&方法签名,编译器会优化它适合你“。

好的,我希望它发生:

#include <sstream>

std::stringstream GetStream() {
    std::stringstream s("test");
    return s;
}

auto main() -> int {
    auto s = GetStream();
}

我很好

error: use of deleted function ‘std::basic_stringstream<char>::basic_stringstream(const std::basic_stringstream<char>&)’
     return s;

错误。 我不明白,为什么它会尝试复制构造函数? 不应该使用移动构造函数和c ++ 11中的所有好东西吗? 我用“--std = c ++ 14”。

好吧,这是我的gcc版本(4.9.3)中的一个错误。 似乎已在> = 5中修复.https://gcc.gnu.org/bugzilla/show_bug.cgi?id = 54316

暂无
暂无

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

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