c++ - 将 int 分配给 double&
问题描述
我想了解为什么这不能编译:
int main()
{
int a = 1;
double& b = a;
std::cout << b;
}
使用double const& b = a
而不是double& b = a
工作正常。
解决方案
Adouble
和 anint
在内存中有不同的对齐要求和不同的表示。通过另一种类型的眼睛将变量读取为一种类型也会使您的程序具有未定义的行为。
当你做类似的事情时
int a = 1;
double b = a; // note, not a reference
thena
被隐式转换为一个临时double
值,然后分配给b
. 如果你改为
double& b = a;
然后b
尝试引用该temporary double
,这是无效的,因为该temporary 将在表达式的末尾被销毁。
但是,您可以通过使用const&
. 然后临时的生命将被延长到引用生命的结束(范围的结束)。
例子:
const double& b = a; // valid, but usually pointless
关于您对问题的补充:
虽然使用
double const& b = a
而不是double& b = a
工作正常
那只是因为“标准是这样说的”。临时的非const&
表示您想要更改该临时的 - 这通常是一个错误,在这些情况下您可能需要 adouble
而不是 a 。double&
推荐阅读
- sql - 将 GROUP BY 与 SELECT CASE WHEN 语句一起使用
- node.js - 如何在多阶段 docker 文件中 pnpm 和 Next.js?
- python-3.x - PyBullet 中的确定性OverlappingPairs 设置有什么作用?
- ubuntu - 如何在桌面上自定义 ubuntu 安装程序?
- flutter - CachedNetwokImage - 渲染前调整图像大小
- python - 如何使用 canvas.scale()“放大”和“缩小”canvas.create_image()?
- azure - 如何使用 jar 在 azure 管道中部署功能?
- python - TypeError:对象字典不能在“等待”表达式中使用
- node.js - Cassandra 的 Node.js 驱动程序为不同的 fetchSize 返回不正确的结果集
- git - 了解范围差异的输出