You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

static_cast与reinterpret_cast差异及C++代码命题等价性咨询

C++命题2与命题4等价性判断

首先明确两个命题对应的转换规则:

  • 命题2:尝试用static_cast将nullptr(std::nullptr_t类型)直接转换为无符号长整型V,该转换不符合static_cast的语法要求,代码无法编译。
  • 命题4:将char类型指针U*先通过static_cast转为void*,再通过static_cast转为int类型指针T*,该转换符合C++标准对static_cast的定义,代码可正常编译。

二者完全不等价,核心差异如下:

  • 转换场景完全不同:命题2属于空指针常量到整数的跨类别转换,命题4属于不同对象指针类型通过void*中转的同类别转换,属于完全无关的两类类型转换场景。
  • 合法性判断逻辑无关联:命题2编译失败的原因是static_cast的合法转换列表中,不包含std::nullptr_t到非布尔、非指针类型整数的直接转换规则;命题4编译成功的原因是static_cast显式支持void*与任意对象指针类型的双向转换,二者的判断依据没有任何重叠。
  • 合法实现的要求不同:命题2对应的转换如果要合法,必须使用reinterpret_cast或者C风格强制转换;命题4对应的转换不需要用到reinterpret_cast,仅靠static_cast就能完成标准允许的合法转换。

内容的提问来源于stack exchange,提问作者Etienne M

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 22:06:01