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

时间:2017-11-26 04:20:59

标签: c++ variables reference const

我目前正在阅读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,这根本不是一个对象..

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

2 个答案:

答案 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;

Reference

  
      
  • rvalue可用于初始化 const lvalue reference ,在这种情况下,rvalue标识的对象的生命周期将延长,直到引用范围结束。
  •