c – 这是什么意思“!somePointer”?

所以阅读一些代码,并且有一种我不理解的语法.

代码是这样的

int * aPtr = new int();
if(!aPtr)               // this part I don't understand
{
 //some code here
}

我猜测语法是询问指针是否指向null,但是
在我读过的大部分书中,通常都是这样说的

if(aPtr == NULL)
{

}
最佳答案
你的问题中有三点重要

1.它是空的吗?

空指针的计算结果为零:

A null pointer constant is an integral constant expression (5.19)
prvalue of integer type that evaluates to zero … (§ 4.10 /1)

因此,要检查指针是否为空,可以将其检查为零.
传统方式(来自C的遗留)来检查变量是否为零

if (!var)  // if (var == 0)

2.什么是宏NULL?

它是一个积分常量表达式,其计算结果为零,但是……忘记使用NULL,而是使用0或nullptr.有关更多信息,请阅读“Should I use NULL or 0?”

3.如何检查新的失败与否?

… it is called by a placement
version of a new-expression when a C++ program prefers a null pointer
result as an error indication, instead of a bad_alloc exception.
(18.6.1.1 / 5)

int *aPtr = new int();
if(!aPtr)

看来你想检查新的成功或失败.这是错误的,因为如果失败则抛出异常,程序将无法到达if(!aPtr).因此,您应该通过try / catch来处理它.

此外,您可以强制编译器停止抛出异常并返回null.为此,你应该尝试:

int* aPtr = new(std::nothrow) int();

转载注明原文:c – 这是什么意思“!somePointer”? - 代码日志