4

哦,我在右值引用理解中发现了一个问题。问题:

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。

4

1 回答 1

8

返回对局部变量的引用是未定义的行为。什么事情都可能发生。不要这样做。

于 2013-10-30T20:13:41.160 回答