const T& 引用初始化为临时

const T& reference initialized to a temporary

对于以下代码:

const int &Rtest = 0;

我不确定为什么 g++ 接受这个(所有编译器都会接受这个吗?)。我以为引用类型一定是引用对象,而不是任意数,那么此时Rtest呢?在编程中如何使用?

对比:

int &Rtest = 0;

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

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

(我知道int没关系,这只是我碰巧用的类型。)

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

const int &Rtest = 0;

这里的 0 是临时的,这就是为什么 Rtest 可以引用它

int &Rtest = 0;

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

很有趣,VC++ 确实接受这种语法,尽管它不清楚而是将 0 重新声明为变量或将其捕获为临时变量

I'm unsure why g++ accepts this

因为语言规范告诉它。您可以将某些类型的引用绑定到临时对象。这对于通过引用函数传递临时变量很有用;在像这样的其他情况下不太有用,但仍然允许。

would all compilers accept this?

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

what is Rtest at this point?

对类型为 int 且值为 0 的临时对象的引用。临时对象的生命周期已延长以匹配引用的生命周期。

临时对象只能绑定到 constrvalue 引用,这就是为什么您的 int& 示例无法编译的原因。