在C / C ++中,null和NULL常数是否完全相同?
当我在Visual Studio中编写代码时,我注意到null和NULL不会突出显示相同的语法,并且编译结果与在代码的某些部分中使用null而不是NULL并不相同。 / p>
答案 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
,但没有null
。 NULL
用于
指示在讨论指针时定义的宏。
在讨论null
字符时使用null
。 null
字符代表'\0'
。
如果您要寻求区别,那么请不要使用这种语义
(x == '\0')
和(x == NULL)
之间的值取决于x
是什么。
如果(x == '\0')
是x
或char
,则使用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
指针。
对于其他所有内容,您都必须考虑
比较是有效的,事物将如何转换或提升。