代码之家  ›  专栏  ›  技术社区  ›  nz_21

C++静态引用R值引用-为什么它们工作?

c++
  •  0
  • nz_21  · 技术社区  · 6 年前

    int a = 10;
    int&& b = static_cast<int&&>(a);
    

    在我看来,这是一件很重要的事 type T&& 是对临时对象的引用--基础对象未放置在内存中。

    但是 a

    0 回复  |  直到 6 年前
        1
  •  3
  •   M.M    6 年前

    你把右派和临时派混在一起了。临时变量是对象,r值是表达式。

    把表达式分成不同类别的系统 左值 , , pr值 3 = 4; )但它没有更深的含义。

    a .

    然后我们初始化一个引用,它直接绑定,因为类型是相同的(注意:类型, int ,而不是类别)。

    代码的效果与 int& b = a; decltype(b) .

    注释也说明了一个很好的问题——临时对象仍然存在于内存中(在抽象机器中),它们只是与其他对象不同的存储类。在寿命延长的情况下,它们的行为非常像自动存储的对象。


    反过来说,你可以有一个左值表达式来指定一个临时对象, int const& x = 5; 左值表达式的结果 x 指定一个已延长其使用寿命的临时的。

    甚至没有延长寿命, std::string{} = "x" 是左值 operator= auto z = (std::string{} = "x") = "y"; 当然,这不是一个好的代码样式,但是理解它有助于理解类型和值类别系统。