c++ - 为什么可以使用右值引用作为成员而没有生命周期问题?

标签 c++ rvalue

有时我看到人们使用右值引用作为成员,我总是想知道这是如何可能的以及它如何不会导致生命周期问题。以此为例:

class Foo
{
public:
    Foo(int&& i)
      : i_(std::move(i))
    {
    }
    void printNum()
    {
        std::cout << i_ << std::endl;
    }
private:
    int&& i_;
};


int main()
{
    Foo f{5};
    f.printNum(); // Outputs 5 every time
}

本例中整数 5 存在于什么范围内?当调用下一行时,传递给 Foo 构造函数的右值肯定已被破坏,那么为什么对 printNum 的调用不能保证未定义的行为呢?我们不是试图访问不再使用的内存吗?

最佳答案

int 在表达式 Foo f{5}; 的末尾被销毁,因此程序具有未定义的行为。

关于c++ - 为什么可以使用右值引用作为成员而没有生命周期问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67526169/

相关文章:

pointers - Go 中的临时地址?

c++ - 非常量左值引用

c++ - 具有新放置的右值引用(与 std::vector.push_back 类似的功能)

c++ - 两个 omp for 循环之间的区别

c++ - 基于像素和基于帧的方法之间的区别

c++ - 在 Windows 上通过 Live555 服务实时 OpenCV H.264 流

c++ - QT服务器端写函数有错误(在线程0中停止...)

c++ - const 和非常量指针的统一包装器

c++ - 为什么 C++ 右值不是不可变的

c++ - 为什么 "universal references"具有与右值引用相同的语法?