代码之家  ›  专栏  ›  技术社区  ›  Nick Strupat

C++中引用引用的目的是什么?

  •  11
  • Nick Strupat  · 技术社区  · 14 年前

    在我研究Boost库的冒险中,我遇到了一些函数签名,它们的参数是对对象引用的引用。

    例子:

    void function(int && i);
    

    这样做的目的/好处是什么,而不是简单地引用一个对象?我想如果有一个在增强。

    3 回复  |  直到 14 年前
        1
  •  18
  •   Thomas    14 年前

    这不是对引用的引用;没有这样的东西。

    你看到的是C++0X rvalue reference ,用双符号表示, && . 这意味着争论 i 因为函数是临时的,所以允许函数在不引起调用代码问题的情况下删除其数据。

    例子:

    void function(int &i);  // A
    void function(int &&i); // B
    int foo();
    
    int main() {
        int x = foo();
        function(x);     // calls A
        function(foo()); // calls B, because the return value is a temporary
    }
    

    这在平原地区很少有用 int 但在定义移动构造函数时非常有用,例如。移动构造函数类似于复制构造函数,只是它可以安全地从原始对象“窃取”内部数据,因为它是一个临时的,在移动构造函数返回后将不再存在。

        2
  •  3
  •   James McNellis    14 年前

    这不是对引用的引用。它是一个RValk引用,它是即将到来的C++0X标准支持的一个新特性。

        3
  •  2
  •   pmr    14 年前

    您看到的是一个右值引用。它是C++0X的一种新的核心语言特征。 见 here 或者不太正式 here .

    原始提案可以找到 here