if(指针== NULL)和if(!指针)之间有什么区别?

时间:2017-12-04 14:35:02

标签: c++ pointers

使用之间有什么区别:

if( pointer == NULL) 

并且

if(!pointer)

我关注两者在以下几点上的分歧:
 1.编译器的不同之处是什么?如果是,那怎么样?
 2.两者中哪一种是一般用途的推荐编码方式,为什么?
 你能否解释一下编译器如何“看到”NULL。

编辑:为简单起见,指针的类型为int *。

3 个答案:

答案 0 :(得分:5)

假设pointer是指针类型,if (pointer == NULL)是不合时宜且不好的C ++,因为C ++中的空指针值在C ++中是nullptr,其中 type { {1}}。

nullptr_t很多首选的习惯用法。

答案 1 :(得分:2)

  
      
  1. 它们与编译器不同吗?如果是,那怎么样?
  2.   

如果pointer确实有指针类型,那么编译器就没有任何区别。

  
      
  1. 这两种中哪一种是推荐的一般用途编码方式,为什么?
  2.   

可能有建议。

使用!pointer的一个可能的好处是,没有机会错误输入pointer = NULL,它具有非常不同的含义,但格式正确。另一个优点是需要更少的打字。

  
      
  1. 你能否解释一下NULL是如何看到的?#34;由编译器。
  2.   

如标准中所述,NULL是一个实现定义的宏,它扩展为空指针常量。

答案 2 :(得分:1)

  1. 他们都是0的比较;一个是明确的。您可以通过查看生成的程序集来解决编译器的差异。

  2. 这是一个意见问题,因此不在议题中。

  3. NULL是一个应该等于0的宏。因此,在与指针进行比较时,它被认为是不好的做法,因为nullptr有一个隐式转换为指针类型,从而阻止它与整数;而NULL没有这样的转换,因此可以与整数进行比较。