【发布时间】:2013-10-30 20:11:18
【问题描述】:
哦,我在右值引用理解中发现了一个问题。 问题:
int&& foo()
{
int n = 5;
return std::move(n);
}
int bar()
{
int y = 10;
return y;
}
int main()
{
int&& p = foo();
bar();
std::cout << p;
}
编译器不会写出我们从函数 foo 返回本地地址的错误或警告。我将在功能栏中将值 5 替换为 10。但结果是 5。 如果我将 std::move 更改为 static_cast 编译器会出错,结果为 10。为什么会这样?我使用 gcc 4.8.1。
【问题讨论】:
-
问题略有不同,但答案与Is returning by rvalue reference more efficient?相同
-
您似乎在使用右值引用,因为它们是某种神奇的东西。他们不是。它们是参考。不要返回对函数本地事物的引用。他们会晃来晃去。另外,避免不必要的
std::move电话。如果你返回一个函数本地的东西,你不需要std::move。事实上,在这种情况下使用std::move可能会损害性能,因为它有效地禁用了返回值优化。
标签: c++ c++11 move-semantics rvalue-reference