我可以将nullptr存储到bool吗?

时间:2014-02-27 10:41:26

标签: c++ pointers syntax shortcut nullptr

我有一个函数返回指向给定名称的bool类型对象的指针。如果找不到该对象,则返回nullptr

现在我想将变量设置为返回的布尔值,如果未找到则设置为false。我可以这样写吗?

bool flag = *Get("name");

这相当于这个更长的实现吗?

bool *result = Get("name");
bool flag = result == nullptr ? false : *result;

5 个答案:

答案 0 :(得分:2)

不,它不相同。在第一种情况下,如果您的方法返回nullptr,您可能会遇到运行时错误。

答案 1 :(得分:2)

这不等同。在第一种情况下,您尝试取消引用nullptr将会崩溃,而在第二种情况下,您会先进行正确的检查。

答案 2 :(得分:2)

如果我理解正确,您需要的内容可以是nullptrtruefalse

升级库(www.boost.org)有一个optional类,您可以利用它:

boost::optional<bool> foo;

这允许您使用if (!foo)检查空值,如果相反,则使用*来恢复布尔值。

答案 3 :(得分:2)

第一个不正确,因为你不能取消引用空指针。

第二个是正确的,但简化为:

bool flag = result && *result;

如果您想避免每个调用的result变量,请执行以下操作:

bool istrue(bool const *result) {
    return result && *result;
}

bool flag = istrue(Get("name"));

答案 4 :(得分:1)

这两者并不相同。第一个实现将导致分段错误(因为您将尝试取消引用NULL指针)。

第二种选择是正确的。