我目前正在阅读c ++ Primer,在其中一个练习中,它显示了两种类型的引用初始化,一种是const而一种不是,而在一次const中,引用指向0 ..我认为引用只能指向物体!!
bgRun
所以第一个,int变量i是-1。然后int引用r指的是0,即 无效,疑难杂症
现在在第二个,const int i = -1,然后const引用r = 0 ..怎么样?
我知道引用不能是const,const是引用引用的内容,本书说const引用可以引用const和非const对象(相同类型)。这仍然无法解释为什么它可以指向0,这根本不是一个对象..
我不确定第二个陈述是如何有效的,有人请解释一下!
答案 0 :(得分:6)
在
const int &r = 0;
创建一个值为0的临时对象,然后r
绑定到该对象。这是允许的,因为允许const
引用绑定到右值。它也适用于右值参考:
int&& r = 0; // ok
但是,它不能与int&
一起使用,因为int&
变量只能绑定到左值。
请注意,引用绑定到的临时对象将一直存在,直到引用超出范围。见https://herbsutter.com/2008/01/01/gotw-88-a-candidate-for-the-most-important-const/
答案 1 :(得分:1)
C ++特别允许将rvalue绑定到const lvalue引用,因此这完全符合标准:
const int &r = 0;
- rvalue可用于初始化 const lvalue reference ,在这种情况下,rvalue标识的对象的生命周期将延长,直到引用范围结束。