使用之间有什么区别:
if( pointer == NULL)
并且
if(!pointer)
我关注两者在以下几点上的分歧:
1.编译器的不同之处是什么?如果是,那怎么样?
2.两者中哪一种是一般用途的推荐编码方式,为什么?
你能否解释一下编译器如何“看到”NULL。
编辑:为简单起见,指针的类型为int *。
答案 0 :(得分:5)
假设pointer
是指针类型,if (pointer == NULL)
是不合时宜且不好的C ++,因为C ++中的空指针值在C ++中是nullptr
,其中 type { {1}}。
nullptr_t
是很多首选的习惯用法。
答案 1 :(得分:2)
- 它们与编译器不同吗?如果是,那怎么样?
醇>
如果pointer
确实有指针类型,那么编译器就没有任何区别。
- 这两种中哪一种是推荐的一般用途编码方式,为什么?
醇>
可能有建议。
使用!pointer
的一个可能的好处是,没有机会错误输入pointer = NULL
,它具有非常不同的含义,但格式正确。另一个优点是需要更少的打字。
- 你能否解释一下NULL是如何看到的?#34;由编译器。
醇>
如标准中所述,NULL
是一个实现定义的宏,它扩展为空指针常量。
答案 2 :(得分:1)
他们都是0的比较;一个是明确的。您可以通过查看生成的程序集来解决编译器的差异。
这是一个意见问题,因此不在议题中。
NULL是一个应该等于0的宏。因此,在与指针进行比较时,它被认为是不好的做法,因为nullptr有一个隐式转换为指针类型,从而阻止它与整数;而NULL没有这样的转换,因此可以与整数进行比较。