我有这段C++代码:
int main() {
int* ptr = nullptr;
int& ref = reinterpret_cast<int&>(ptr);
return ref;
}
在两个编译器上使用
-Wall -Wextra -pedantic
进行编译时,Clang 和 GCC 都不会诊断强制转换,只有 GCC 会诊断我取消引用空指针。
从
ptr
到 ref
的转换是否是未定义的行为?或者只是从返回语句UB中的ref
读取?
当然是这样,参考文献永远不应该是
nullptr
。您使用 reinterpret_cast
的事实应该已经告诉您需要了解的所有信息。