错误!
$ cat double.cc
#include<iostream>
int main() {
int i = 42;
double &r = i;
}
$ g++ double.cc
double.cc: In function ‘int main()’:
double.cc:5: error: invalid initialization of reference of type ‘double&’
from expression of type ‘int’
$
有效!
$ cat double.cc
#include<iostream>
int main() {
int i = 42;
const double &r = i;
}
$ g++ double.cc
$
为什么我们在第一种情况下会得到错误?我知道这是讨论 here , 但我不确定我是否理解为什么不允许这样做,而 int
到 const double&
是允许的?
最佳答案
int i = 42;
double &r = i;
这里的r
是对double
的引用,但是i
不是double
,那么怎么可能r
指的是什么?这不可以。因此,它从表达式 i
中创建了一个类型为 double
的临时对象。但同样,r
是非常量 引用,无法绑定(bind)到临时对象。
但是,如果您将其设为 const 引用,那么它将起作用:
double const & r = i;
请注意,const
引用可以绑定(bind)到由 i
创建的临时对象。
关于c++ - 为什么这种从 int 到 double& 的转换不起作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12428174/