为什么从int转换为double并且不起作用?

Moe*_*oeb 0 c++ reference

错误!

$ 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’
$
Run Code Online (Sandbox Code Playgroud)

作品!

$ cat double.cc
#include<iostream>

int main() {
    int i = 42;
    const double &r = i;
}
$ g++ double.cc
$
Run Code Online (Sandbox Code Playgroud)

为什么我们在第一种情况下得到错误?我知道这是讨论在这里,但我不知道我明白为什么这个不准,而intconst double&被允许?

Naw*_*waz 6

int i = 42;
double &r = i;
Run Code Online (Sandbox Code Playgroud)

这里r是一个参考double,但i不是一个double,那么怎么能r参考呢?这不可以.因此它double从表达式中创建了一个类型的临时对象i.但同样,r是非const引用,不能绑定到临时对象.

但是,如果你使它成为const引用,那么它将工作:

double const & r = i;
Run Code Online (Sandbox Code Playgroud)

请注意,const引用可以绑定到由其创建的临时对象i.