boost实用工具之tribool库

简介

boost.tribool类似于c++内建的bool类型,不过却又种状态:true(真),false(假),以及indeterminate(不确定状态)。
使用tribool组件,应该在程序中包含头文件

类摘要

class tribool
{
public:  // 缺省构造
    tribool(bool value);
    tribool(bool initial_value);
    //初始化为不确定状态, 该参数实际上是一个指针类型。
    tribool(indeterminate_keyword_t);

    operator safe_bool()const; // bool 转型

    enum value_t
    {
        false_value, true_value, indeterminate_value
    } value;
};
//(判断为不确定的指定方法)
bool indeterminate(tribool x); // 判断是不是为不确定状态。
tribool operator! (tribool x); // ..!重载
... 

tribool 的操作是通过逻辑运算符和比较运算符的重载来完成的,包括|| && ! == 和!=,这些都可以任意混合bool和tribool一起使用。

  • * 任何与indeterminate的比较操作结果都是indeterminate;*
  • 与indeterminate的逻辑或运算(||)只有与true运算时结果为ture,其他结果都为indeterminate
  • 与indeterminate的逻辑与运算(&&)只有与false运算时结果为false,其他均为indeterminate
  • indeterminate的逻辑非操作(!)结果都为indeterminate

用法

如果你仅仅使用它的true和false两种状态,那么和bool没有什么区别,如果你需要用到不确定状态,那么你必须遵循三态布尔运算。

#include <iostream>
#include <boost\logic\tribool.hpp>
using namespace boost;
using namespace std;

void main()
{
    tribool tb(true); // bool值 初始化
    tribool tb2(!tb); // false

    if (tb)  // tb == true
    {   cout << "true" << endl; }

    tb2 = indeterminate; // 赋值为不确定状态
    assert(indeterminate(tb2)); // 检测是不是不确定状态
    cout << "tb2 = " << tb2 << endl;

    if (tb2 == indeterminate)//不能这样操作,无意义不会执行
    {   cout << "indeterminate" << endl;    }

    if (indeterminate(tb2)) //判断是否为不确定状态
    {   cout << "indeterminate" << endl;    }
    // || && 操作
    cout << (tb2 || true )<< endl;
    cout << (tb2 && false )<< endl;

}

注意tribool 与optional的区别
虽然两者在功能上有些类似,一个没有初始化的optional同样可以表示一个不确定的bool值。但是还是有本质的区别:optional语义上表示未初始化的bool,是无意义的。而 tribool为indeterminate时,是一个初始化的未知状态。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值