std :: move和static_cast <t &&>不同的结果</t &&>

时间:2013-10-30 20:11:19

标签: c++ c++11 move-semantics rvalue-reference

哦,我在rvalue-references理解中发现了一个问题。 问题:

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。

1 个答案:

答案 0 :(得分:8)

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