在 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
这对于普通的int
s 很少有用,但在定义移动构造函数时非常有用,例如。移动构造函数类似于复制构造函数,只是它可以安全地从原始对象中“窃取”内部数据,因为它是一个临时的,在移动构造函数返回后将不复存在。
【讨论】:
啊,好的。谢谢你的澄清。这段代码现在在 boost (1.42) 中如何?据我了解,boost 目前是为 C++03 标准编写的。 @Silver:它将利用某些编译器的功能。一些编译器支持 C++0x(有点),如果 Boost 想检测和使用它,它会的。 @SilverSun:Boost 使用条件编译(#if 等)来自定义每个编译器可用的内容。【参考方案2】:您正在查看的是右值引用。它是 C++0x 的一个新的核心语言特性。 请参阅 here 或不太正式的 here。
原提案可以在here找到
【讨论】:
【参考方案3】:这不是对引用的引用。它是一个右值引用,是即将到来的 C++0x 标准支持的新特性。
【讨论】:
以上是关于在 C++ 中使用对引用的引用的目的是啥?的主要内容,如果未能解决你的问题,请参考以下文章