什么标头在C++中定义NULL?

Jam*_*ard 40 c++ null

根据C++入门,<cstdlib>标题定义NULL.cpluspplus说它的定义是<cstddef>.

最终,如果没有包含正确的标题,我认为NULL不能被引用.

从我所看到的,然而它可以被引用并生成程序,并且在仅包括之后编译和运行而没有警告或错误 <iostream>

请帮我理解这个.

Jer*_*fin 41

C标准要求NULL中定义locale.h,stddef.h,stdio.h,stdlib.h,string.h,time.h,和wchar.h.

C++标准要求在c*与每个对应的标题中定义NULL .

C标准对标准可以定义的名称非常严格 - 每个标准头必须精确定义标准要求头定义的名称.它可以定义的唯一其他名称是为实现保留的名称,例如以下划线开头,后跟另一个下划线或大写字母的名称.

在这方面,C++标准更加宽松 - 包括任何一个标准头可以具有与包括任何或所有其他标准头相同的效果.

从实际的角度来看,C++实现过去常常采用这种宽容性的优点 - 也就是说,包括一个标准头文件经常定义来自许多其他标准头文件的名称.最近的实现倾向于更像C标准所要求的工作,更接近每个标头,仅定义由该标头定义所需的名称.它们可能仍然不像C标准那样严格,但比以前更接近(通常).


Vau*_*ato 25

C++ 03第18.1.2节说明在cstddef中定义了NULL.

在某些实现中,iostream可能包含cstddef,因此包括iostream也会给你NULL.