要区分nullptr和NULL,首先要明白NULL的含义: NULL是一个宏定义,在c和c++中的定义不同,c中NULL为(void*)0,而c++中NULL为整数0 所以在c++中int *p=NULL; 实际表示将指针P的值赋为0,而c++中当一个指针的值为0时,认为指针为空指针 然后理解nullptr: nullptr是一个字面值常量,类型为std::nullptr_t,空指针常...
C++中的nullptr相比C语言中的NULL具有更好的类型安全性。nullptr是一个强类型的指针空值,而NULL在C中...
NULL和nullptr的区别 在使用C语言对指针进行初始化的时候,通常的做法是int*p=NULL,但是 C++11 引入了 nullptr 关键字用来表示空指针,而NULL被定义成0。 在C语言中NULL会被定义成(void*)NULL,但是C++不允许直接将 void * 隐式转换到其他类型,NULL 只好被定义为 0。
NULL来自C语言,一般由宏定义实现,而 nullptr 则是C++11的新增关键字。在C语言中,NULL被定义为(void*)0,而在C++语言中,NULL则被定义为整数0。 在C++中指针必须有明确的类型定义。但是将NULL定义为0带来的另一个问题是无法与整数的0区分。 因为C++中允许有函数重载。 那么在传入NULL参数时,会把NULL当做整数0来...
答:个人觉得由于(void*)0更能体现指针的意义,而常数0更多的时候是用作整数。因此,C语言中NULL定义选择了(void*)0。(仅供参考) 问题二:C++11中为什么要引入nullptr? 考虑着这样一个函数重载的情形: #include <stddef.h>voidfoo(int) {}//#1voidfoo(char*) {}//#2intmain() { ...
但是存在一个问题,C语言是有隐式类型转换的,所以 NULL(这里实际上是 (void *)0 ) 可以隐式转换到 int 或 char * 。这就让程序很为难了,程序不知道选择调用哪个函数。而在 C 语言中,并不支持函数重载,故在纯 C 语言中不会有上面这个问题。 下面我们来修改一下上面的程序,将 NULL 替换为 nullptr,修改后...
而在c++中可以直接使用auto来遍历. void TestFor(){int array[] = { 1, 2, 3, 4, 5 };for(auto& e : array)e *= 2;for(auto e : array)cout << e << " ";return 0;} 其中&表示引用,可以对array中的数组进行修改. 3.NULL与nullptr: ...
在 C++11 及之后的版本中,nullptr是专门用来表示空指针的字面量,它的类型是std::nullptr_t,可以...
NULL 是定义在vcruntime.h头文件中的宏 (我的机器是Win10 x64)nullptr是C++11引入的关键字,它的...