【问题标题】:Use NULL or nullptr for a C++ null pointer?对 C++ 空指针使用 NULL 或 nullptr?
【发布时间】:2014-07-29 08:22:35
【问题描述】:

我正在尝试在虚拟测试文件上制作一些 Clang AST 转储。这是我正在使用的命令行:

 clang -Xclang -ast-dump -fsyntax-only test.cpp

int * a = NULL; 被我的 test.c 识别,但不是我的 test.cpp。

我也尝试过int * a = nullptr;,但这也不起作用。

我应该更改命令行中的一些选项吗?

【问题讨论】:

  • 供参考:NULL; nullptr
  • nullptr 是 C++11 以后的版本。您的编译器符合哪个标准?
  • 您要么必须使用nullptr 并与c++11 兼容进行编译,要么使用C 头文件之一NULL#include。或者你总是可以使用0...
  • NULL<cstddef> 中定义,这是您的问题吗?
  • 语言支持-std=c++11?

标签: c++ null clang


【解决方案1】:

使用这个命令行: clang -std=c++11 -Xclang -ast-dump -fsyntax-only test.cpp

现在你可以使用nullptr

#include <cstddef>

现在你可以使用NULL

否则使用0

【讨论】:

  • 使用 0 与我必须使用的 MISRA C++ 规则相冲突。但是命令行是正确的!谢谢
【解决方案2】:

C++11 之前的 C++ 允许 NULL(如果包含 cstddef 头文件)或 0 本身。

由于我的 C 背景,我更喜欢NULL,我想清楚地看到空指针和零值之间的区别。但是,有些人更喜欢只使用0

在 C++11 中引入nullptr 解决了一些问题,包括在给定空指针(一个接受整数或接受指针的函数)时调用哪个重载函数。

【讨论】:

  • 来自en.cppreference.com/w/cpp/types/NULL 似乎在使用 cstddef 时 NULL 总是“OK”?
  • 使用 0 与我必须使用的 MISRA C++ 规则相冲突。所以我宁愿使用 cstddef ;)
【解决方案3】:

只需使用 0。

int *a = 0;

nullptr 仅在 C++11 中引入。将选项 -std=c++11 传递给您的编译器。您的 clang 版本是否支持 C++11?关于 NULL 见here.

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-04-22
    • 2023-03-17
    • 1970-01-01
    • 2016-11-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-01-17
    相关资源
    最近更新 更多