Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/163.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::move()会发生什么_C++_C++11_Move Semantics_Stdmove - Fatal编程技术网

C++ 在没有赋值的情况下调用std::move()会发生什么

C++ 在没有赋值的情况下调用std::move()会发生什么,c++,c++11,move-semantics,stdmove,C++,C++11,Move Semantics,Stdmove,如果我只使用std::move而没有任何赋值,会发生什么 std::string s = "Moving"; std::move(s); //What happens on this line to s? //is s still valid here? 不会单独移动传递的对象;它只是可能为对象启用移动语义。它由一个cast组成,其结果可用于选择(如果可能的话)支持移动语义的适当重载。因此,在代码中: std::string s = "Moving";

如果我只使用std::move而没有任何赋值,会发生什么

std::string s = "Moving";
std::move(s);  //What happens on this line to s?
//is s still valid here?
不会单独移动传递的对象;它只是可能为对象启用移动语义。它由一个cast组成,其结果可用于选择(如果可能的话)支持移动语义的适当重载。因此,在代码中:

std::string s = "Moving";
std::move(s);
std::将s移到右值引用。未使用铸造的结果。上面的对象s没有实际移动,也没有修改。

不会自行移动传递的对象;它只是可能为对象启用移动语义。它由一个cast组成,其结果可用于选择(如果可能的话)支持移动语义的适当重载。因此,在代码中:

std::string s = "Moving";
std::move(s);

std::将s移到右值引用。未使用铸造的结果。上面的对象实际上没有移动,也没有修改。

这是否回答了您的问题?谢谢我读了一遍。据我所知,s什么也不会发生?这就是答案吗?@guarav是的,没错。这回答了你的问题吗?谢谢我读了一遍。据我所知,s什么也不会发生?这就是答案吗?@guarav是的,没错。在我的团队中,我们的极端立场是,如果std::move用于某个对象,则将其视为右值引用被利用。即使在您知道未利用右值的情况下,例如在本例中。但在这种情况下,它会因为是一个无目的的禁止操作而在代码审查中被点名。@Eljay巧合的是,我想到了模板std::decay_t steal_stateT&&arg{return std::movearg;}来强制移动,即使返回的值没有被使用。由于steal_state按值返回对象,并且该对象是从arg构造而来的,因此如果传递的参数不是const-qualified,它将移动该参数。在我的团队中,我们采取的极端立场是,如果std::move用于某个对象,则将其视为右值引用被利用。即使在您知道未利用右值的情况下,例如在本例中。但在这种情况下,它会因为是一个无目的的禁止操作而在代码审查中被点名。@Eljay巧合的是,我想到了模板std::decay_t steal_stateT&&arg{return std::movearg;}来强制移动,即使返回的值没有被使用。由于steal_state按值返回对象,并且该对象是从arg构造的,因此如果传递的参数不是const限定的,它将移动该参数。