【问题标题】:check if 2 pointers are null or not检查2个指针是否为空
【发布时间】:2021-03-05 06:43:54
【问题描述】:

如果两者都是 nullptr,那么检查这种方式是否安全,或者有更好的方法? 谢谢。

#include <iostream>

using namespace std;

int main()
{
    int *x;
    int *y;
    
    if (not (x or y))
    {
      std::cout<<"both are nullptr";
    }
    
    return 0;
}

【问题讨论】:

  • 是的,没关系。我会把它写成if(!x &amp;&amp; !y),在我看来这更直接,更容易阅读。
  • x, y 未初始化,因此您的测试导致 UB...

标签: c++ pointers null


【解决方案1】:

首先,您应该使用实际的运算符名称(!||)来提高可读性(在您看来,这样会降低可读性,但是一旦掌握了所有运算符,您将这样会更容易)。

是的,这是检查两个指针​​是否有效的有效方法,但一开始有点令人困惑(再次强调可读性)。最好使用&amp;&amp;(and) 运算符:

if (!x && !y)

这会检查 x y 是否都不是空指针。

【讨论】:

  • 关于可读性,我会说它只是一种风格(只要我们真正使用它们的词义而不是像int bitand ref = some_var;这样的东西)。我发现这里的文字比符号更易读(即使我主要使用符号是为了保持一致性)。
【解决方案2】:

是布尔代数的基本Law 1 of De Morgan's laws(析取的否定),所以和if(!x &amp;&amp; !y)完全一样。

也就是说,除非您有 ISO 语言问题并且不能使用 !||,否则尽量不要使用替代运算符表示,它们会混淆人们。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-07-02
    • 1970-01-01
    • 2015-07-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-05
    相关资源
    最近更新 更多