nullptr 出现的目的是为了替代 NULL。在某种意义上来说,传统 C++ 会把 NULL、0 视为同一种东西,这取决于编译器如何定义 NULL,有些编译器会将 NULL 定义为 ((void*)0),有些则会直接将其定义为 0。 C++ 不允许直接将 void * 隐式转换到其他类型,但如果 NULL 被定义为 ((void*)0),那么...
2,nullptr C++11,其中有一个是新的关键字nullptr 如果我们的编译器是支持nullptr的话,那么我们应该直接使用nullptr来替代NULL的宏定义。正常使用过程中他们是完全等价的。 模拟nullptr的实现: 某些编译器不支持c++11的新关键字nullptr,我们也可以模拟实现一个nullptr [cpp] const class nullptr_t_t { public: templat...
nullptr的出现解决了一个容易出现混淆的地方。假设我们有重载的函数 voidfunc(intx);voidfunc(int*x); 我们想调用func(NULL),实际上我们是想调用void func(int* x),但是因为NULL是0,所以调用了void func(int x),如果是func(nullptr)则调用的是void func(int* x),符合我们的想法,因为nullptr不能转为int,可...
虽然上面我们说明了0比NULL可以让我们更加警觉,但是我们并没有避免这个问题。这个时候C++ 11的nullptr就很好的解决了这个问题,我们在C++ 11中使用nullptr来表示空指针,这样最早的代码是这样的, foo.h voidbar(sometype1 a, sometype2 *b); a.cpp bar(a, b); b.cpp bar(a, nullptr); 在我们后来把bar的...
main.cpp:8:8:error:invalid conversion from ‘long int’ to ‘int*’[-fpermissive]fun(ptr); 很显然NULL被推导为long int,而不是空指针,因而导致函数类型不匹配而报错。 但是如果我们用nullptr就不会有上面的问题。 总结 如果你想表示空指针,那么使用nullptr,而不是NULL。
[cpp] view plain copy print ? // 考虑下面两个重载函数 void foo(int void foo(char* p) foo(NULL); // which is called? 2. nullptr的应用场景 2.1 编译器 如果我们的编译器是支持nullptr的话,那么我们应该直接使用nullptr来替代NULL的宏...
linuxy@linuxy:~/dirNULL$ g++ main.cpp -o main linuxy@linuxy:~/dirNULL$ ./main void func(int *y) linuxy@linuxy:~/dirNULL$ 编译通过,并且执行成功! 看到这里你应该明白为什么 C++11 引入 nullptr 了吧! 就是因为 NULL 在 C++ 程序中容易引起二义性!
这是我读过的关于以下主题的最佳**简短**答案(并且技术上精确):NULL vs. 0 vs. nullptr。谢谢你! (3认同) @SiPlus `((void *)0)` 在 C++ 中是不正确的,因为 `void*` 不能像在 C 中那样强制转换为其他指针类型。例如,glibc 在 `__cplusplus 时执行 `#define NULL 0` ` 已定义。 (2认同) ...
0 vs. nullptr这个话题的最佳简短回答(技术上准确)。谢谢! - jose.angel.jimenez 3 @SiPlus 在C++中((void *)0)是不正确的,因为void*不能像在C语言中那样强制转换为其他指针类型。例如,glibc在定义了__cplusplus时会将NULL宏定义为0。 - rpjohnst 17 你在这个文件中包含了 "stdlib.h" 或者 "cstdlib"...
NULL vs nullptr 在过去,我们如果要表示一个指针为空,我们条件反射肯定会这么写: 然而啊,有没有想过这是有问题的,比如下面的这段代码: 程序会输出什么??笔者问了好多人,他们一致的回答...怎么批量给文件添加拓展名? 以修改为 mp4 为例子 先创建一个测试文件夹,方便测试 1、添加一些文件 2、编写 bat 文件 ...