在C ++中,我们通常检查指针是否为null,我只知道我们应该使用
if(NULL == ptr)
而不是:
if(ptr == NULL)
我想知道为什么?
在additiol中,如果我们想将ptr初始化为null,我们应该使用ptr = NULL
还是ptr = 0
?是的,我知道在C ++中,我们通常使用ptr = nullptr
,我想知道为什么我们这样做只是想统一代码?感谢
答案 0 :(得分:12)
这是一种编码风格(名为Yoda Conditions),以避免在if语句中编写=
而不是==
,在if中使用赋值=
是有效的声明,但通常不是你想要的。
就我个人而言,我不喜欢这样使用,因为它很难阅读,现代编译器会在if语句中使用=
时发出警告。
另请注意:
if(ptr == NULL)
与if(!ptr)
相同。nullptr
以使用NULL
替换。因此,要初始化空指针,最好使用ptr = nullptr
关于为什么使用nullptr
而不是NULL
:
在C ++ 11之前,NULL
通常在内部实现为#define NULL 0
,但问题是,0
也是整数零。在某些情况下可能会造成麻烦。例如:
void func(int n);
void func(char *s);
func(NULL); //call which function?
虽然auther暗示NULL
是指针类型,但编译器只知道调用func(0)
。所以第一个版本将被调用。
使用func(nullptr)
,编译器会知道它是一个指针并调用第二个版本。
答案 1 :(得分:1)
使用yoda等式可以防止某些错误,例如使用单个=
或编译器尝试从智能指针确定整数。
众所周知
我花了两天时间追踪这个错误,因为他们认为yoda是个坏主意。