在 C++ 中使用对引用的引用的目的是啥?

Posted

技术标签:

【中文标题】在 C++ 中使用对引用的引用的目的是啥?【英文标题】:What is the purpose of using a reference to a reference in C++?在 C++ 中使用对引用的引用的目的是什么? 【发布时间】:2011-02-09 11:08:47 【问题描述】:

在我研究 boost 库的冒险中,我遇到了函数签名,这些函数签名具有对对象引用的引用。

例子:

void function(int && i);

这样做的目的/好处是什么,而不是简单地引用一个对象?我假设有一个,如果它在提升中。

【问题讨论】:

【参考方案1】:

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

您看到的是 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

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

【讨论】:

啊,好的。谢谢你的澄清。这段代码现在在 boost (1.42) 中如何?据我了解,boost 目前是为 C++03 标准编写的。 @Silver:它将利用某些编译器的功能。一些编译器支持 C++0x(有点),如果 Boost 想检测和使用它,它会的。 @SilverSun:Boost 使用条件编译(#if 等)来自定义每个编译器可用的内容。【参考方案2】:

您正在查看的是右值引用。它是 C++0x 的一个新的核心语言特性。 请参阅 here 或不太正式的 here。

原提案可以在here找到

【讨论】:

【参考方案3】:

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

【讨论】:

以上是关于在 C++ 中使用对引用的引用的目的是啥?的主要内容,如果未能解决你的问题,请参考以下文章

在 C++11 中对数组进行右值引用的目的是啥?

如果使用引用的目的是更改原始变量的值,为啥要使用 const 引用传递? [C++] [重复]

c++重载赋值操作符的返回值是啥?

c++ 实现引用计数类的目的,原理及源码

C++入门

C++入门