'null'和'NULL'相同吗?

时间:2019-11-15 09:32:17

标签: c++ c

在C / C ++中,null和NULL常数是否完全相同?

当我在Visual Studio中编写代码时,我注意到null和NULL不会突出显示相同的语法,并且编译结果与在代码的某些部分中使用null而不是NULL并不相同。 / p>

3 个答案:

答案 0 :(得分:15)

可能是,可能不是。

C和C ++都定义NULL,但方式略有不同。

null不属于任何一个标准;它既不是关键字也不是保留字,因此您可以将其用作变量名,类名&c。

在C ++中表示指针无效性的首选方法是nullptr,它具有专门为指针无效性设计的类型。

答案 1 :(得分:2)

C标准说:

  

6.3.2.3/3指针

     

值为0的整数常量表达式,或此类表达式   强制转换为类型void *空指针常量

stddef.h然后包含NULL-定义为该值。

C ++(与C大致相关的另一种语言,肯定不是人们通常认为的那样)在其早期版本中使用了NULL(不要使用它!)。但是在C ++ 11之前的版本中,常量0被定义为表示无指针的方式。 las,这有一些严重的缺点,然后C ++ 11定义了nullptr常量。请注意,nullptr关键字

C ++标准说:

  

2.14.17 / 1指针文字

     

指针文字是关键字nullptr。它是类型std::nullptr_t的prvalue。 [注意:std::nullptr_t是一个既不是指针类型也不是指向成员类型的指针的独特类型。相反,此类型的prvalue是空指针常量,可以将其转换为空指针值或空成员指针值。]

     

3.9.1 / 10基本类型

     

类型std::nullptr_t的值是一个空指针常量。这样   值参与指针和成员指针   转换。 sizeof(std::nullptr_t)等于   sizeof(void*)

关于C ++标准中的NULL说:

  

18.2 / 3类型

     

NULL宏是实现定义的C ++空指针常量。

答案 2 :(得分:0)

C语言有NULL,但没有nullNULL用于 指示在讨论指针时定义的宏。

在讨论null字符时使用nullnull字符代表'\0'

如果您要寻求区别,那么请不要使用这种语义 (x == '\0')(x == NULL)之间的值取决于x是什么。 如果(x == '\0')xchar,则使用int;如果(x == NULL)x,则使用$vehicle=Vehicle::all(); $grouped = $vehicle->groupBy(function ($item, $key) { return substr($item['that_coloumn_name_like_type'], 0); }); $groupCount = $grouped->map(function ($item, $key) { return collect($item)->count(); }); //dd($groupCount); to check it work correctly 指针。
对于其他所有内容,您都必须考虑 比较是有效的,事物将如何转换或提升。