const T&引用初始化为临时的

时间:2015-03-19 16:28:21

标签: c++ reference const

以下代码:

const int &Rtest = 0;

我不确定为什么g ++接受这个(所有编译器都接受这个吗?)。我认为引用类型必须引用对象,而不是任意数字,那么 Rtest在这一点上是什么?它是如何用于编程的?

相反:

int &Rtest = 0;

不会编译,这对我来说很有意义,因为引用类型必须引用对象。

那么为什么使类型引用const int&可以接受呢?

(我知道int并不重要,这只是我碰巧使用的类型。)

2 个答案:

答案 0 :(得分:1)

  

我不确定为什么g ++会接受这个

因为语言规范告诉它。您可以将某些类型的引用绑定到临时对象。这对于通过引用函数来传递临时值非常有用;在这样的其他环境中不太有用,但仍然允许使用。

  

所有编译器都接受这个吗?

是的,如果它们符合要求。

  

此时Rtest是什么?

对类型为int且值为0的临时对象的引用。临时对象的生命周期将扩展为与引用的生命周期相匹配。

Temporaries只能绑定到const rvalue 引用,这就是您的int&示例无法编译的原因。

答案 1 :(得分:0)

因为根据C ++语言规则,const引用CAN附加到临时,但是常规引用不能。 这就是为什么第一个没问题,但第二个不是

const int &Rtest = 0;

这里0是暂时的,这就是Rtest可以引用它的原因

int &Rtest = 0;

这里0是临时的,但Rtest不是const引用,所以它不能引用它

有趣的是,VC ++确实接受了这种语法,虽然它不清楚它将0重新声明为变量或将其作为临时变量