std::bit_cast与std::nullptr_t互转是否合规?结果需满足哪些要求?
关于
std::bit_cast与std::nullptr_t互转的合规性与行为问题 核心疑问
- 使用
std::bit_cast进行与std::nullptr_t(即decltype(nullptr))类型的互转是否被C++标准禁止? - 若允许,
std::bit_cast的结果是否必须与static_cast一致? - 来回转换(指针→
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
相关产品推荐
相关产品推荐

