最近,我“玩弄”了rvalue,以了解它们的行为。大多数结果并没有让我感到惊讶,但后来我发现,如果我抛出一个局部变量,就会调用move构造函数。
在此之前,我认为移动语义规则的目的是保证只有当编译器检测到不再使用该对象(如在临时对象中),或者用户承诺不再使用它(如std:: move )时,该对象才会移动(并变为无效)。
然而,在下面的代码中,所有这些条件都不成立,我的变量仍然在移动(至少在g++ 4.7.3上)。
为什么会这样呢?
#include <iostream>
#include <string>
using namespace std;
int main() {
string s="blabla";
try {
throw s;
}
catch(...) {
cout<<"Exception!\n";
}
cout<<s; //prints nothing
}
https://stackoverflow.com/questions/16938951
复制相似问题