C++:什么是独立引用?

oli*_*ito 6 c++ reference

在哪种情况下,您想要定义对某段内存的引用?

例如:

const int & r = 8; 
Run Code Online (Sandbox Code Playgroud)

而不是简单地写:

int r = 8;
Run Code Online (Sandbox Code Playgroud)

mas*_*oud 10

通过较短的引用将长表达式替换为对象并使代码更具可读性是很有用的.例如:

const int &SphereRadius = Configuration::getInstance()->sphere->radius;
Run Code Online (Sandbox Code Playgroud)

每当配置同时更改时(例如,在另一个线程中),您的引用都会更新.

您展示的代码只是一个更大工具的简单可能性.在很多情况下,你的例子就像你之前所理解的那样毫无意义.这类引用的主要目标是使对象别名化.

  • 通过引用函数传递对象以及修改引用对象而不会产生指针混淆的能力.

  • 在基于范围的循环中使用它们来修改容器中的迭代项.

  • 在某些情况下,通过更简单的表达缩短表达式.和更多... .


vso*_*tco 5

您不能将非const引用绑定到rvalue,即不能"引用"不能出现在赋值运算符左侧的内容(如临时对象).主要原因是当temp被破坏时,你最终会有一个悬空引用,而C++不允许这样做.您的代码将无法编译.

有趣的是,你可以将temp绑定到const引用,这将延长temp的生命周期,即

const Foo& ref = Foo(); // creates a temporary Foo, destructor is not invoked now
Run Code Online (Sandbox Code Playgroud)

然而临时没有被破坏.请参阅const引用是否延长了临时的寿命? 但是我不会在我的代码中使用它,它只是我们大多数人混淆的根源.