我目前正在阅读 C++ Primer,在其中一个练习中,它显示了两种类型的引用初始化,一种是 const 和一种不是,在一种 const 中,引用指向 0..我认为引用只能指向对象!!
int i = -1, &r = 0; // illegal, r must refer to an object.
const int i = -1, &r = 0; // legal.
所以第一个,int变量i是-1。然后 int reference r 指的是 0 这是 无效,问题
现在在第二个中,const int i = -1,然后是 const reference r = 0.. 怎么样?
我知道引用不能是 const,const 是引用所指的内容,书上说 const 引用可以引用 const 和非 const 对象(同一类型)。这仍然没有解释为什么它可以指向 0,这根本不是一个对象..
我不确定第二个陈述如何有效,请有人解释!
最佳答案
在
const int &r = 0;
创建一个值为 0 的临时对象,然后将 r
绑定(bind)到该对象。这是允许的,因为允许 const
引用绑定(bind)到右值。它也适用于右值引用:
int&& r = 0; // ok
但是,它不适用于 int&
,因为 int&
变量只能绑定(bind)到左值。
请注意,引用绑定(bind)到的临时对象将一直存在,直到引用超出范围。参见 https://herbsutter.com/2008/01/01/gotw-88-a-candidate-for-the-most-important-const/
关于c++ - 这个 C++ 引用初始化合法吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47493005/