您希望在哪种情况下定义对某段内存的引用?
例如:
const int & r = 8;
而不是简单地写:
int r = 8;
答案 0 :(得分:10)
通过较短的引用将长表达式替换为对象并使代码更具可读性是很有用的。例如:
const int &SphereRadius = Configuration::getInstance()->sphere->radius;
每当配置同时更改时(例如在另一个线程中),您的引用都会更新。
您展示的代码只是一个更大工具的简单可能性。在很多情况下,你的例子就像你之前所理解的那样毫无意义。这类引用的主要目标是使对象别名化。
通过引用函数传递对象,以及修改引用对象的能力,而不会产生指针混淆。
在基于范围的循环中使用它们来修改容器中的迭代项。
在某些情况下,通过更简单的表达式缩短表达式。还有更多.......
答案 1 :(得分:5)
你不能将非const引用绑定到rvalue,即不能"引用"到一个不能出现在赋值运算符左侧的东西(如临时对象)。主要原因是当temp被破坏时,你最终会有一个悬空引用,而C ++不允许这样做。你的代码不会编译。
有趣的是,你可以将temp绑定到const引用,这将延长temp的生命周期,即
const Foo& ref = Foo(); // creates a temporary Foo, destructor is not invoked now
然而临时没有被破坏。见Does a const reference prolong the life of a temporary? 但是我不会在我的代码中使用它,它只是我们大多数人的混淆源。