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 的临时对象的引用。临时对象的生命周期已延长以匹配引用的生命周期。
临时对象只能绑定到 const
或 rvalue 引用,这就是为什么您的 int&
示例无法编译的原因。
对于以下代码:
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 的临时对象的引用。临时对象的生命周期已延长以匹配引用的生命周期。
临时对象只能绑定到 const
或 rvalue 引用,这就是为什么您的 int&
示例无法编译的原因。