C++ C++;-测试空指针最有效的方法是什么?

C++ C++;-测试空指针最有效的方法是什么?,c++,performance,pointers,C++,Performance,Pointers,在测试指针空性的两种方法中,最有效的方法是什么:if(pointer==NULL)或if(!pointer) 这与以往任何时候都没有区别。这纯粹是一个你喜欢什么的风格问题 顺便说一下,如果您使用C++11或更高版本,您应该使用NULL ptr而不是NULL。这些都是相同的。无论你使用什么,它都不会改变你的程序 我更喜欢if(ptr),因为: 它又短又清晰 它不依赖于NULL关键字。在C++11或更高版本上必须是nullptr 发件人: 它们与C++类(如AutoTypTR)兼容,这些对象充当指针

在测试指针空性的两种方法中,最有效的方法是什么:
if(pointer==NULL)
if(!pointer)


这与以往任何时候都没有区别。这纯粹是一个你喜欢什么的风格问题


顺便说一下,如果您使用C++11或更高版本,您应该使用
NULL ptr
而不是
NULL

这些都是相同的。无论你使用什么,它都不会改变你的程序

我更喜欢
if(ptr)
,因为:

  • 它又短又清晰
  • 它不依赖于
    NULL
    关键字。在C++11或更高版本上必须是
    nullptr
  • 发件人:
  • <>它们与C++类(如AutoTypTR)兼容,这些对象充当指针,并提供转换到BoL以完全启用此习语。对于这些对象,与NULL的显式比较必须调用到指针的转换,这可能有其他语义副作用,或者比bool转换所暗示的简单存在性检查更昂贵


    我更喜欢
    if(p!=NULL)
    ,因为它可以防止意外错误的发生,比如在声明和使用之间使用
    int

    在这里,编译器应该发出警告,因为int不同于
    NULL
    (最初
    NULL=(void*)0

    此外,我更愿意这样声明:

    MyObject* p=NULL;
    
    因为你不能保证
    p
    不会有不同的zéro值。如果您没有在声明和使用之间实例化它

    而且,它也不像以前那样具有误导性
    if(p==NULL){}else{}
    可能发生在意外赋值中(仅一个=)


    C++11或更高版本中,即使调用
    NULL
    仍在工作,但已被弃用,这可能会对代码进行一些更改。

    我非常怀疑它们是否编译到不同的程序集。@BoBTFish我毫不怀疑。我可以试试看。根据我的说法,我在我们的项目中使用的东西都是一样的。这取决于你的代码要求,如果你想要满足的条件,根据你想要执行的条件if,if满足到true。最重要的是,在你在if中进一步使用它之前,确保你的指针初始化为NULL。@NickyC他们没有提到编译器,cpu体系结构、操作系统、优化选项。。。
    MyObject* p=NULL;