【发布时间】:2017-10-09 07:41:51
【问题描述】:
假设我有一个指针:int *pointer。
如果我想测试它的可空性,我应该这样做:
bool nullability = !pointer;
或与:
bool nullability = (pointer == nullptr);
这两个表达式是等价的吗? 如果不是,为什么以及有什么副作用?
【问题讨论】:
假设我有一个指针:int *pointer。
如果我想测试它的可空性,我应该这样做:
bool nullability = !pointer;
或与:
bool nullability = (pointer == nullptr);
这两个表达式是等价的吗? 如果不是,为什么以及有什么副作用?
【问题讨论】:
两者是等值的,因为nullptr 保证在转换为布尔值时会转换为false。
来自 N4296:
4.12 布尔转换
1算术右值、无范围枚举、指针或指向成员类型的指针可以是 转换为 bool 类型的纯右值。一个零值,空指针值, 或 null 成员指针值被转换为 false;任何其他值是 转换为真。对于直接初始化 (8.5),类型为纯右值 std::nullptr_t 可以转换为 bool 类型的纯右值;这 结果值为假。
【讨论】:
根据标准和这个答案 (Implicit cast of null pointer to bool) 这两种语法具有相同的行为
【讨论】: