gpt4 book ai didi

c++ - 空指针的奇怪行为

转载 作者:搜寻专家 更新时间:2023-10-31 00:56:33 25 4
gpt4 key购买 nike

如果我编译(使用 Visual Studio 2010),我偶然发现了以下问题

int main()
{
double* d_ptr = int(0);
if(d_ptr == nullptr)
cout << "I am a nullptr" << endl;

return 0;
}

我得到结果“我是一个 nullptr”

如果我将指针赋值替换为:

double* ptr = (int) 0;

我预计两者都会失败,因为它们都显式转换为没有指针类型的整数。有人可以帮助我了解发生了什么吗?

编辑:再次尝试使用 g++ 并成功。不知道我第一次做错了什么。现在我仍然很困惑为什么它首先起作用。

最佳答案

您已经进入了 C++(和 C)的一个更模糊的领域。引自 n4296 (这是最新的免费 C++14 草案):

4.10 Pointer conversions [conv.ptr]

1 A null pointer constant is an integer literal (2.13.2) with value zero or a prvalue of type std::nullptr_t. A null pointer constant can be converted to a pointer type; the result is the null pointer value of that type

有点惊讶 (int)0 被接受为“整数文字” - 事实上,我认为这是编译器中的一个错误(但它是非常极端的情况)。

啊哈!我刚刚记起:旧版本的 C 和 C++ 没有说“整型​​文字”,而是说“整型常量表达式”。 int(0) 一个整型常量表达式,所以在旧的编译器上是允许的。

这意味着您的 g++ 问题可能取决于您指定的是 C++14 还是更早的版本。

关于c++ - 空指针的奇怪行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39395289/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com