我可以将 nullptr 存储到布尔值吗?
Can I store nullptr to bool?
我有一个函数,它返回一个指针,指向给定名称的 bool 类型的对象。如果未找到该对象,则返回nullptr
。
现在我想将一个变量设置为返回的布尔值,如果未找到,则为 false。我可以这样写吗?
bool flag = *Get("name");
这是否等同于这个更长的实现?
bool *result = Get("name");
bool flag = result == nullptr ? false : *result;
第一个不正确,因为您无法取消引用空指针。
第二个是正确的,但简化为:
bool flag = result && *result;
如果要避免每次调用的 result
变量,请按如下所示执行:
bool istrue(bool const *result) {
return result && *result;
}
bool flag = istrue(Get("name"));
不,它不等同。在第一种情况下,如果方法返回 nullptr,则可能会收到运行时错误。
这不是等价的。在第一种情况下,您正在尝试取消引用nullptr
这将崩溃,而在第二种情况下,您首先进行适当的检查。
如果我
理解正确,你想要一些可以nullptr
、true
或false
的东西。
提升库 (www.boost.org) 有一个 optional
类,您可以利用它:
boost::optional<bool> foo;
这允许您使用 if (!foo)
检查空性,如果相反的情况为真,则使用 *
来恢复布尔值。
两者并不等同。第一个实现将导致分段错误(因为您将尝试取消引用 NULL 指针)。
第二种选择是正确的。
相关文章:
- 在没有定义返回类型的函数中返回布尔值,并将结果保存在无错误的char编译中-为什么
- 变量定义到C++布尔值转换
- 如何确保在使用基于布尔值的两个方法之一调用方法时避免分支预测错误
- 重载更少,则运算符返回相反的布尔值
- C++ 将 CIN 值存储到任何类型的数组中
- 将返回值存储在函数指针数组的指针中是如何工作的?
- 将此布尔值传递给此函数的最有效方法是什么?
- 如何设置 c++ 类的布尔值?
- 使用 MAKEWORD / MAKEWPARAM 使用布尔值而不是布尔值
- 此递归函数的每次迭代的值存储在哪里?
- 我们可以将集合的值存储在变量中吗?就像我们可以将数组的值存储在变量中一样
- 将 10 个线程与原子布尔值同步
- 创建类似于布尔值的变量类型
- 如何将 x.y 坐标的值存储在不同的数组中
- 布尔值向量的基于范围 for 循环
- Android :需要在 c++ NDK 中创建共享首选项对象并存储一些布尔值
- 我可以将 nullptr 存储到布尔值吗?
- 为什么提升circular_buffer存储我的布尔值?
- 将地址和布尔值存储在一个单词中,以实现无锁双链表
- 如何在无符号int上使用位标志,以便在其中存储额外的布尔值