keywords: [C++]两个连续感叹号(双感叹号)的意义

网上看到有些代码在判断指针是否为空时,写两个感叹号:

void Test(A* Ptr)
{
    bool b = !!Ptr;
    ...
}

可能原因有两个:

  • 从JavaScript、TypeScript转C++的程序员,在用JS的语法写C++代码,JS必须这样,但是C++中非必要;
  • GCC提供了某些编译器参数(比如__builtin_expect),这些语法要求:对于指针类型的参数,转换为bool类型时,必须添加两个感叹号;

Defining double exclamation?
https://stackoverflow.com/questions/11374810/defining-double-exclamation

__builtin_expect 说明
https://www.jianshu.com/p/2684613a300f


时间是一只藏在黑暗中的温柔的手,在你一出神一恍惚之间,物走星移。----龙应台《目送》