Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/151.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ssh/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ std::stringstream;移动分配不会使源处于无效状态_C++_C++11_Stringstream - Fatal编程技术网

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(至少这是我学到的——因为你不知道它的状态或者它包含什么)