gpt4 book ai didi

c++11 - move 或交换字符串流

转载 作者:行者123 更新时间:2023-12-04 11:23:42 25 4
gpt4 key购买 nike

我想 move 一个 stringstream,在现实世界的应用程序中,我有一些 stringstream 类数据成员,我想在操作期间将其重用于不同的字符串。

stringstream 没有复制赋值或复制构造函数,这是有道理的。但是,根据 cppreference.com 和 cplusplus.com std::stringstream 应该定义了 move 分配和交换操作。我两个都试过,都失败了。

move 分配

#include <string>       // std::string
#include <iostream> // std::cout
#include <sstream> // std::stringstream

int main () {

std::stringstream stream("1234");

//stream = std::move(std::stringstream("5678"));

stream.operator=(std::move(std::stringstream("5678")));

//stream.operator=(std::stringstream("5678"));

return 0;
}

来源: http://ideone.com/Izyanb
prog.cpp:11:56: error: use of deleted function ‘std::basic_stringstream<char>& std::basic_stringstream<char>::operator=(const std::basic_stringstream<char>&)’
stream.operator=(std::move(std::stringstream("5678")));

编译器声明所有三个语句都没有复制赋值,这是真的。但是,我不明白为什么它不使用 move 赋值,特别是因为 std::move 应该返回一个右值引用。 Stringstream 应该有一个 move 分配,如下所示: http://en.cppreference.com/w/cpp/io/basic_stringstream/operator%3D

PS:我正在使用 c++11,因此右值引用是“世界”的一部分。

交换

我觉得这很奇怪,我从 cplusplus.com 复制了示例代码,但失败了:
// swapping stringstream objects
#include <string> // std::string
#include <iostream> // std::cout
#include <sstream> // std::stringstream

int main () {

std::stringstream foo;
std::stringstream bar;

foo << 100;
bar << 200;

foo.swap(bar);

int val;

foo >> val; std::cout << "foo: " << val << '\n';
bar >> val; std::cout << "bar: " << val << '\n';

return 0;
}

来源: http://ideone.com/NI0xMS
cplusplus.com 来源: http://www.cplusplus.com/reference/sstream/stringstream/swap/
prog.cpp: In function ‘int main()’:
prog.cpp:14:7: error: ‘std::stringstream’ has no member named ‘swap’
foo.swap(bar);

我错过了什么?为什么我不能 move 或交换字符串流?我应该如何交换或 move 字符串流?

最佳答案

这是 GCC 上缺少的功能:请参阅 bug 54316 ,它已被修复(你可以感谢 Jonathan Wakely)为下一个版本 (gcc 5)

clang libc++ 编译此代码:

int main () {

std::stringstream stream("1234");

std::stringstream stream2 = std::move(std::stringstream("5678"));

return 0;
}

Live demo

also compiles the example with std::stringstream::swap

关于c++11 - move 或交换字符串流,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27152263/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com