假设我有一个指针:int *pointer.
如果我想测试它的可空性,我应该这样做:
bool nullability = !pointer;
Run Code Online (Sandbox Code Playgroud)
或者:
bool nullability = (pointer == nullptr);
Run Code Online (Sandbox Code Playgroud)
两个表达都是等价的吗 如果没有,为什么以及副作用是什么?
两者都是等价的,因为nullptr保证false在转换为布尔值时转换为.
从N4296:
4.12布尔转换
1算术,无范围枚举,指针或指向成员类型的指针的prvalue可以转换为bool类型的prvalue.零值,空指针值或空成员指针值转换为false; 任何其他值都转换为true.对于直接初始化(8.5),std :: nullptr_t类型的prvalue可以转换为bool类型的prvalue; 结果值为false.