【问题标题】:Check pointer's nullability: !pointer or pointer == nullptr? [duplicate]检查指针的可空性:!pointer or pointer == nullptr? [复制]
【发布时间】:2017-10-09 07:41:51
【问题描述】:

假设我有一个指针:int *pointer。

如果我想测试它的可空性,我应该这样做:

bool nullability = !pointer;

或与:

bool nullability = (pointer == nullptr);

这两个表达式是等价的吗? 如果不是,为什么以及有什么副作用?

【问题讨论】:

标签: c++ pointers


【解决方案1】:

两者是等值的,因为nullptr 保证在转换为布尔值时会转换为false。

来自 N4296:

4.12 布尔转换
1算术右值、无范围枚举、指针或指向成员类型的指针可以是 转换为 bool 类型的纯右值。一个零值,空指针值, 或 null 成员指针值被转换为 false;任何其他值是 转换为真。对于直接初始化 (8.5),类型为纯右值 std::nullptr_t 可以转换为 bool 类型的纯右值;这 结果值为假。

【讨论】:

    【解决方案2】:

    根据标准和这个答案 (Implicit cast of null pointer to bool) 这两种语法具有相同的行为

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-03-15
      • 1970-01-01
      • 2019-09-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多