首页 > 后端开发 > C++ > C 初始化是否需要左值到右值转换?

C 初始化是否需要左值到右值转换?

Susan Sarandon
发布: 2024-12-15 12:33:08
原创
810 人浏览过

Does C   Initialization Require Lvalue-to-Rvalue Conversion?

初始化是否需要左值到右值转换?

C 11 标准对于初始化是否需要左值到右值转换仍然不明确。但是,有证据表明,除非另有说明,否则右值应作为内置运算符中的操作数。这种方法已扩展到初始化器的上下文。

猜想:值的纯右值

假设的规范是,只要需要值,就需要纯右值,包括在初始化期间。这意味着初始化对象时需要进行左值到右值的转换。

猜想的后果

如果初始化需要纯右值,则会发生以下情况:

  • int x = x;经历左值到右值的转换,导致未定义的行为,因为 x 未初始化。
  • int y = 0; 等代码的格式错误; int x = y;,其中 y 是左值。
  • 不一致的行为,例如z = y 是未定义的行为,但 z = x 不是这样,假设 x == y。

进一步证据

支持此猜想的其他证据包括:

  • 标准第 8.5/16 段暗示需要用于“标准转换”,但没有提及类别转换。
  • 第 4.1 段提到了将左值到右值转换应用于未初始化对象时的未定义行为。
  • 缺陷报告建议将第 4.1 段改写为包括具有不确定值的对象,包括未初始化的对象

结论

根据提供的证据,最可能的解释是初始化需要纯右值,从而在使用未初始化的左值作为初始化器时导致未定义的行为。除非另有说明,这种解释与期望内置运算符中的右值的更广泛方法一致。

以上是C 初始化是否需要左值到右值转换?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板