C++ std::stringstream;移动分配不会使源处于无效状态
根据文档,移动分配运算符应使源字符串流处于无效状态: 移动字符串流。操作后,源流变为无效状态 (发件人:) 考虑到这一点,我希望下面的代码输出C++ std::stringstream;移动分配不会使源处于无效状态,c++,c++11,stringstream,C++,C++11,Stringstream,根据文档,移动分配运算符应使源字符串流处于无效状态: 移动字符串流。操作后,源流变为无效状态 (发件人:) 考虑到这一点,我希望下面的代码输出0,但它使用GCC 6.3.1输出1 #include <iostream> #include <sstream> int main() { std::stringstream source; std::stringstream target; target = std::move(source);
0
,但它使用GCC 6.3.1输出1
#include <iostream>
#include <sstream>
int main()
{
std::stringstream source;
std::stringstream target;
target = std::move(source);
std::cout << bool(source);
return 0;
}
#包括
#包括
int main()
{
std::stringstream源;
std::stringstream目标;
目标=标准::移动(源);
std::cout此处的“invalid”可能不是指它的iostate
标志(“failure”≠ “failbit
”)。但这是一个不幸的措词。@KonradRudolph,我有点希望措词也是这里的问题。那么,在这种情况下,就没有办法检测到source
已经从这里移走了?这是一个问题吗?你想解决的实际问题是什么?当你把a移到B时,它会做a的一个浅拷贝,并使B无效,所以B应该ldn不再使用。这通常是通过交换a和B中的值或将a的所有基础数据浅拷贝到B中,然后使B中的所有值为空(或让B通过超出范围而销毁自身)。从技术上讲,在移动B后不应使用B(至少这是我学到的——因为你不知道它的状态或者它包含什么)