假设我有一个指针:int *pointer
。
如果我想测试它的可空性,我应该这样做:
bool nullability = !pointer;
或者用:
bool nullability = (pointer == nullptr);
这两个表达式是否相同? 如果没有,为什么以及副作用是什么?
答案 0 :(得分:7)
两者都是等价的,因为nullptr
在转换为布尔值时可以保证转换为false
。
来自N4296:
4.12布尔转换
1 算术,无范围枚举,指针或指向成员类型的指针的prvalue可以是 转换为bool类型的prvalue。零值,空指针值, 或null成员指针值转换为false;任何其他价值 转换为真。对于直接初始化(8.5),类型的prvalue std :: nullptr_t可以转换为bool类型的prvalue;该 结果值是假的。
答案 1 :(得分:1)
根据标准和此答案(Implicit cast of null pointer to bool),两种语法具有相同的行为