为什么这种从int到double的转换不起作用?
Why does this conversion from int to double& not work?
错误!
$ 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
$
为什么在第一种情况下会出现错误?我知道这里讨论过这个问题,但我不确定我是否理解为什么不允许这样做,而允许int
const double&
?
int i = 42;
double &r = i;
这里r
是对double
的引用,但i
不是double
,那么r
怎么能指代呢?不能。因此,它会从表达式 i
中创建一个类型 double
的临时对象。但同样,r
是非常量引用,不能绑定到临时对象。
但是,如果您将其设置为常量引用,那么它将起作用:
double const & r = i;
请注意,const
引用可以绑定到从i
创建的临时对象。
当你写的时候
int i = 42;
double const &r = i;
i
隐式转换为双精度值,从而生成临时值或右值。不允许将非常量引用绑定到右值,因此r
需要成为上述工作double const&
。
在C++中,您几乎可以将引用视为另一个变量的别名。它们必须在非 cv 合格类型中匹配,在这种情况下,类型是不同的。
它与const double&
一起工作的原因是编译器创建了一个带有i
值副本的临时double
,并将常量引用绑定到该临时引用。这是允许的,因为绑定到临时会将临时的生存期延长到引用的生存期。
相关文章:
- 嘿,我正在尝试将此c ++转换为javascript,但有些东西不起作用
- C++实用程序::转换在静态链接库中不起作用
- 为什么转换不起作用
- 隐式用户定义的转换不起作用,因为在编译C 时无法识别运算符和转换构造函数
- pybind11:Python 到 C++ 数据类型转换不起作用
- sqlite3_exec()!= SQLITE3_OK. 尝试在 OOP 中转换不起作用
- 为什么这种从int到double的转换不起作用?
- C++数组,数组转换不起作用
- OpenCV c++HoughLines转换不起作用
- 不同模型的转换不起作用
- C++ 特殊字符的 Solaris 大写转换不起作用
- 在 C++ 中使用构造函数进行类型转换不起作用?
- C++隐式转换不起作用
- CUDA 和 OpenCV。从 Mat 到 GpuMat 的转换不起作用
- 隐式类型转换不起作用
- 为什么这个角色转换不起作用?
- 为什么从int到double的简单强制转换不起作用?
- 从 std::string 到类的隐式转换不起作用
- 现代OpenGL投影视图模型转换不起作用
- 为什么这种双精度到整型的转换不起作用?