NULL == pointer
NULL == pointer
在C++中,我们通常会检查指针是否为null,我只知道我们应该使用
if(NULL == ptr)
而不是:
if(ptr == NULL)
我想知道为什么?
此外,如果我们想将ptr初始化为null,我们应该使用ptr = NULL
还是ptr = 0
?是的,我知道在C++中,我们通常使用ptr = nullptr
,我想知道为什么我们这样做只是为了统一代码?感谢
这是一种避免在if语句中写入=
而不是==
的编码风格(名为Yoda Conditions),在if语句中使用赋值=
是有效的,但通常不是您想要的。
就我个人而言,我不喜欢这样使用,因为它很难阅读,而且当你在if语句中使用=
时,现代编译器会警告你。
还要注意:
- CCD_ 8与CCD_
- C++11引入了CCD_ 10,用CCD_。因此,要初始化空指针,最好使用
ptr = nullptr
关于为什么使用nullptr
而不是NULL
:
在C++11之前,NULL
通常在内部实现为#define NULL 0
,但问题是,0
也是整数零。在某些情况下可能会引起麻烦。例如:
void func(int n);
void func(char *s);
func(NULL); //call which function?
虽然作者暗示NULL
是一个指针类型,但编译器只知道调用func(0)
。因此,将调用第一个版本。
使用func(nullptr)
,编译器将知道它是一个指针,并调用第二个版本。
使用yoda等式可以防止某些错误,例如使用单个=
或编译器试图从智能指针确定整数。
已知
我花了两天时间追踪那个错误,因为他们认为yoda是个坏主意。
相关文章:
- C++ - "!pointer"和"pointer == nullptr"的区别?
- 如果我std::dynamic_pointer_cast并且底层dynamic_cast的结果为null,那么返回的sh
- 如何在 c++ 中'NULL'字符串
- c++使用foreach使数组为null
- 当使用通配符和null指针调用函数时,对输出的说明
- 当字段可以为null时,如何使用C++接口在Avro中写入数据
- 如何在映射中返回null
- 为什么返回 NULL 不会破坏函数?
- 构造函数中的 QQuickItem 父项 null
- 检查字符串是否"null" C++
- fopen 在 gdb 中返回 NULL
- Python & CTypes Null Pointer Error
- ffmpeg and boost::asio NULL pointer
- 如何修复"reference cannot be bound to dereferenced null pointer"警告
- 文本输出() - "invalid null pointer"
- MFC Web 浏览器.导航错误"A null reference pointer was passed to the stub."
- NULL == pointer
- 静态库调用错误:异常:"A null reference pointer was passed to the stub."(使用 winsock2 Win32)
- 避免"pointer cannot be null in well-defined C++ code"的投射策略
- 如何摆脱 - "warning: converting to non-pointer type 'char' from NULL" ?