c++ - 为什么这种从 int 到 double& 的转换不起作用?

标签 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’
$

有效!

$ cat double.cc
#include<iostream>

int main() {
    int i = 42;
    const double &r = i;
}
$ g++ double.cc
$

为什么我们在第一种情况下会得到错误?我知道这是讨论 here , 但我不确定我是否理解为什么不允许这样做,而 intconst 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/

相关文章:

c++ - 试图制作一个排序的动态列表(数据结构)

围绕非托管 C++ 的 C# 包装器

c++ - 无法从函数返回动态字符串

asp.net - 为什么 Visual Studio 给我的 App_Code 类没有定义类型?

c++ - 存储右值引用 : should this work?

c++ - 在C++中混淆&和*

c++ - 使用字符串构造定义名称

c++ - 函数覆盖不同的返回类型

c++ - 包含引用或指针的对象 vector

swift - 之间有什么不同?和 ! Swift 中的弱引用和强引用