如果您使用 C++11 编译器编译此程序,则向量不会移出函数。
#include <vector>
using namespace std;
vector<int> create(bool cond) {
vector<int> a(1);
vector<int> b(2);
return cond ? a : b;
}
int main() {
vector<int> v = create(true);
return 0;
}
如果您像这样返回实例,它会被移动。
if(cond) return a;
else return b;
我用 gcc 4.7.0 和 MSVC10 试过了。两者的行为方式相同。
我猜为什么会发生这种情况:
三元运算符类型是左值,因为它是在执行 return 语句之前评估的。此时 a 和 b 还不是 xvalues(即将到期)。
这个解释正确吗?
这是标准的缺陷吗?
这显然不是预期的行为,在我看来是一个非常常见的情况。