c++ - std::move 和 static_cast<T&&> 不同的结果

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

<分区>

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

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。

最佳答案

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

关于c++ - std::move 和 static_cast<T&&> 不同的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19692903/

相关文章:

c++ - 可以简化这个表达式吗?

c++ - C++11模板参数错误绑定(bind)示例?

c++ - 默认情况下应调用 move 构造函数

c++ - 延长变量的生命周期

c++ - 在任何情况下,返回 RValue 引用 (&&) 是有用的吗?

c++ - 如何声明一个类显式抽象?

c++ - 在锁内对 STL 容器执行耗时操作

c++ - 如何让 g++ 使用移动构造函数编译 c++11 代码?

c++ - 从 `const char*[2]` 转换为 pair<string,string>

C++ 安全连接到数据库