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

std::bit_cast与std::nullptr_t互转是否合规?结果需满足哪些要求?

关于std::bit_cast与std::nullptr_t互转的合规性与行为问题

核心疑问

  1. 使用std::bit_cast进行与std::nullptr_t(即decltype(nullptr))类型的互转是否被C++标准禁止?
  2. 若允许,std::bit_cast的结果是否必须与static_cast一致?
  3. 来回转换(指针→nullptr_t→指针)是否必须返回原始值?

测试情况

我测试了主流编译器,它们均无警告地接受以下代码:

#include <bit>
#include <iostream>

int p = 0;
auto n = std::bit_cast<decltype(nullptr)>( &p );

int main() {
  std::cout 
    << (std::bit_cast<int*>(n) == static_cast<int*>(n))
    << ' '
    << (&p == std::bit_cast<int*>(n));
}

但各编译器的输出存在差异:

  • Clang 输出 0 1
  • GCC 输出 1 0
  • MSVC 输出 1 1

问题确认

哪种实现是符合C++标准的(若存在正确实现)?


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.13 16:39:50