为什么 C++ 在返回本地 std::stringstream 时不使用 RVO?
why doesn't c++ uses RVO when returning local std::stringstream?
我已经阅读了很多关于 rvalue 和返回 C++>= 11 的局部变量的信息。据我了解,"只是按值返回,不要使用移动/前进,不要在方法签名中添加&&,编译器会为您优化它"。
好的,我希望它发生:
#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
相关文章:
- 当我们进行一些操作时,应该使用什么'std::string'或'std::stringstream'?
- C ++中的StringStream有助于使用向量从字符串中提取逗号分隔的整数,而不是空格分隔的整数,为什么?
- 在 c++ 中,如何返回多个对象并从 RVO 中受益
- 在 RAII 构造中修改 RVO 值是否安全?
- 使用 "stringstream " 将字符串转换为整数
- std::stringstream 返回字符 *
- 当 RVO 可以应用时,为什么要按shared_ptr而不是按值返回?
- 使用容器时不同编译器上的 RVO
- std::stringstream::flush() 应该做什么吗?
- 静态 std::stringstream 的叮当整警告
- RVO/NRVO 不能在 Clang++ 的 C++17 中禁用吗?
- RVO在这种情况下会起作用吗
- Stringstream编译错误仅发生在linux环境中
- 将RVO对象传递到std::vector::template_back
- RVO 在返回之前覆盖参数中的值
- "stringstream"复制构造它的字符串吗?
- 为什么"std::stringstream::stringstream(std::string&&)"不存在?
- RVO 何时保证应用/确实适用于 C++20 编译器
- 为什么 {fmt} 比 std::stringstream 慢?
- 为什么 C++ 在返回本地 std::stringstream 时不使用 RVO?