Phi*_*ßen 16 c++ warnings move-semantics c++11
可能重复:
移动对象有什么用处?
在调用std::move
并将结果传递给函数之后,通常必须假定稍后访问移动的对象将导致未定义的行为.
是否有工具可以检测这些访问并警告您.例如:
{
Widget w;
foo(std::move(w));
// w may be undefined at this point
w.doSomething(); // WARN
}
Run Code Online (Sandbox Code Playgroud)
至少,gcc 4.7.2
并且clang 3.2
与-Wall
不抱怨.
更新:回顾这个问题,关键点是编译器无法确定对象在移动后是否仍然有效.如果提议N4034:Destructive Move被接受,我希望编译器有更多选项(但只有在移动是破坏性的时候).
Nic*_*las 15
它们也不应该.移动的类的行为是你想要的.这不是编译器应警告的内容.
对于标准库对象,移动的类处于"有效但未指定的状态".因此,这样做是完全合法的:
std::vector<int> v{20, 30, 40};
std::vector<int> v2 = std::move(v);
v = std::vector<int>{50, 60, 70, 80};
Run Code Online (Sandbox Code Playgroud)
clear
不关心矢量的当前状态是什么; 它只是清除矢量.因此,它被重置为已知状态.同样,operator=
不关心当前的状态; 它会将其重置为已知状态.
归档时间: |
|
查看次数: |
1440 次 |
最近记录: |