在C ++中将布尔变量声明为NULL

时间:2015-12-24 13:42:06

标签: c++ null boolean nullptr

我可以使用nullnullptr作为bool值而不是0 / false吗? 由于将bool声明为null意味着bool值实际上是zero / false,并且在我的情况下不起作用。我使用zero / false作为另一种可能的结果。我希望有一个可以“不存在”的bool值。 (既不是真的也不是假的)。

2 个答案:

答案 0 :(得分:1)

您可以查看boost::optionalboost::tribool

答案 1 :(得分:0)

如果您可以在项目中使用boost,则boost::optional适合您。如果您熟悉Haskell的Maybe,它的工作方式就像那个。{/ p>

简单的使用示例(来自http://www.boost.org/doc/libs/1_60_0/libs/optional/doc/html/boost_optional/examples.html):

// return values
optional<char> get_async_input()
{
    if ( !queue.empty() )
        return optional<char>(queue.top());
    else return optional<char>(); // uninitialized
}

void receive_async_message()
{
    optional<char> rcv ;
    // The safe boolean conversion from 'rcv' is used here.
    while ( (rcv = get_async_input()) && !timeout() )
        output(*rcv);
}

// local variables
optional<string> name ;
if ( database.open() )
{
    name = database.lookup(employer_name) ;
}
else
{
    if ( can_ask_user )
        name = user.ask(employer_name) ;
}

if ( name )
    print(*name);
else print("employer's name not found!");