在C+中为小写null有效+;? < > C++语言规范的任何版本中有小写 null 吗? 背景:

在C+中为小写null有效+;? < > C++语言规范的任何版本中有小写 null 吗? 背景:,c++,standards,c++-standard-library,C++,Standards,C++ Standard Library,在一次采访中,我被问到“以下哪种指针初始化有效?”,我填写了如下表格: // 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; < > C++语言规范的任何版本中有小写 null 吗?< /p> 不。一个词的答案就是不 请尝试下面的代码

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

// 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;
< > C++语言规范的任何版本中有小写<代码> null <代码>吗?< /p>
不。

一个词的答案就是不

请尝试下面的代码

  #include <iostream>
#include <stdlib.h>
using namespace std;
int main(){
    int *p = null;
    int *q = NULL;
    return 0;
}
#包括
#包括
使用名称空间std;
int main(){
int*p=null;
int*q=NULL;
返回0;
}
这会导致以下编译错误:

错误:未在此作用域中声明“null”


这是不言自明的。

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

->#定义空0

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


但是,如果希望小写null,可以通过定义新宏或在头文件的预定义宏中收费来实现。但是在你想做这些改变之前要小心

我不知道,只有NULL和nullptr没有任何东西可以阻止您生成
NULL
宏,就像
NULL
是一个宏一样。@Top Master int*p5=NULL;可以有效也可以无效,具体取决于空值的定义。:@blaze希望工程理性的想法能阻止你这么做。严格来说,
int*p2=2-2
也无效。嗯,是的,就是这样。如果有参考链接或其他东西会更好,但这似乎是正确的答案。@Top Master是的,这需要证明一个否定的答案。这里缺少的证据是C++中没有任何章节提到“代码> null <代码>作为有效令牌。所以说,“不”是最完美的答案:IMO:-“高手,你唯一的保证就是,高级C++程序员看这个答案,因为缺乏注释而同意:”