这个C++参考初始化法律如何?

iMa*_*ial 2 c++ variables const reference

我目前正在阅读c ++ Primer,在其中一个练习中,它显示了两种类型的引用初始化,一种是const而一种不是,而在一次const中,引用指向0 ..我认为引用只能指向对象!

   int i = -1, &r = 0;         // illegal, r must refer to an object.

   const int i = -1, &r = 0;   // legal.
Run Code Online (Sandbox Code Playgroud)

所以第一个,int变量i是-1.然后int引用r引用0,这是无效的,getcha

现在在第二个,const int i = -1,然后const引用r = 0 ..怎么样?

我知道引用不能是const,const是引用引用的内容,本书说const引用可以引用const和非const对象(相同类型).这仍然无法解释为什么它可以指向0,这根本不是一个对象.

我不确定第二个陈述是如何有效的,有人请解释一下!

Bri*_*ian 6

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

创建一个值为0的临时对象,然后r绑定到该对象.这是允许的,因为允许const引用绑定到右值.它也适用于右值参考:

int&& r = 0;  // ok
Run Code Online (Sandbox Code Playgroud)

但是,它不起作用,int&因为int&变量只能绑定到左值.

请注意,引用绑定到的临时对象将一直存在,直到引用超出范围.请参阅https://herbsutter.com/2008/01/01/gotw-88-a-candidate-for-the-most-important-const/