C++:自由站立引用有什么用途?

7
在什么情况下您想要定义对某个内存块的引用?
例如:
const int & r = 8; 

相对于简单地书写,应该写成:
int r = 8;
2个回答

10

将长表达式用对象替换成更短的引用,可以使代码更易读。例如:

const int &SphereRadius = Configuration::getInstance()->sphere->radius;

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

您展示的代码只是一个更大工具的简单可能性。在许多情况下,您之前理解的示例是无意义的。这种引用的主要目标是为对象设置别名。

  • 通过引用将对象传递到函数中,并能够修改所引用的对象而不会造成指针的混淆。

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

  • 在某些情况下通过较简单的表达式缩短表达式等。


5
你不能将非const引用绑定到右值上,即不能“引用”无法出现在赋值运算符左侧(如临时对象)的东西。主要原因是当临时对象被销毁后,你会得到一个悬空引用,而C++不允许这样做。你的代码将无法编译。
然而有趣的是,你可以将一个临时对象绑定到const引用上,这将延长临时对象的生命周期,即:
const Foo& ref = Foo(); // creates a temporary Foo, destructor is not invoked now

然而,临时变量并未被销毁。请参考const引用是否延长了临时变量的生命周期? 然而,我不会在我的代码中使用此方法,因为它会让大多数人感到困惑。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接