【问题标题】:Is lowercase null valid in C++?小写 null 在 C++ 中有效吗?
【发布时间】:2019-06-19 06:31:32
【问题描述】:

在任何版本的 C++ 语言规范中是否有小写的null

背景:

我在一次采访中被问到“以下哪些指针初始化是有效的?”,我填写的表格如下:

// valid
    int* p1 = 0;
    int* p2 = 2-2;
    int* p6 = new int;
// invalid
    int* p3 = 1; 

    int z = 0;
    int* p4 = z;
// ???
    int* p5 = null;

【问题讨论】:

  • 我不知道,只是 NULL 和 nullptr
  • 没有什么能阻止你创建一个null 宏,就像NULL 是一个宏一样。
  • @Top-Master int* p5 = null;根据 null 的定义方式,可以是有效的还是无效的。:)
  • @blaze 希望工程理智的想法能阻止你这样做。
  • 严格来说int* p2 = 2-2;也是无效的。

标签: c++ standards c++-standard-library


【解决方案1】:

在任何版本的 C++ 语言规范中是否有小写的null

没有。

【讨论】:

  • 嗯,是的,就是这样。
  • 使用参考链接之类的会更好,但是,这似乎是正确的答案。
  • @Top-Master 是的,这需要证明是否定的。这里缺席的证据是 C++ 标准中没有提到 null 作为有效标记的任何部分。所以真的,“不”几乎是海事组织的完美答案。 :-)
  • @Top-Master 唯一的保证是高级 C++ 程序员看过这个答案并同意由于缺少 cmets :)
【解决方案2】:

一个字的答案是“否”。

试试下面的代码

  #include <iostream>
#include <stdlib.h>
using namespace std;
int main(){
    int *p = null;
    int *q = NULL;
    return 0;
}

这会在编译时出现以下错误:

错误:“null”未在此范围内声明

这是不言自明的。

【讨论】:

    【解决方案3】:

    答案写在一些头文件中。 NULL 是那些头文件中的预定义宏,例如 **

    -> #define NULL 0

    **。因此我们只能用大写的“NULL”来定义以避免编译终止。

    但是,如果您希望使用小写 null,您可以通过定义新宏或在头文件中的预定义宏中进行收费来实现。但在进行这些更改之前要小心。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-01-13
      • 2020-04-30
      • 2013-06-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-04-17
      • 2013-02-04
      相关资源
      最近更新 更多