boost.tribool
tribool
boost.tribool类似c++内建的bool类,但基于三态的布尔逻辑,在true和false之外还有一个indeterminate状态。一个例子场景是执行某项任务,在执行之前状态时未知的,启动任务后状态时true,停止任务状态时false.
tribool位于名字空间boost::logic,当为了方便使用,需要包含头文件<boost/logic/tribool.hpp>:
#include <boost/logic/tribool.hpp>
using namespace boost;
类摘要:
class tribool
{
public:
tribool(bool value); //缺省构造函数
tribool(bool initial_value); //bool值构造函数
tribool(indeterminate_keyword_t);//初始化为不确定值
operator safe_bool() const; //bool转型
enum value_t { false_value,true_value,indeteeminate_value } value;
};
bool indeterminate(tribool x);
tribool operator!(tribool x);
...
tribool类内部实现了三态bool值得表示,除了构造函数没有其他成员函数,可以在创建tribool对象的同事传入三态bool值对它进行初始化,如果使用无参的缺省构造函数,tribool默认值是false.
对tribool的操作都是通过逻辑运算符和比较运算符的重载来完成的,支持的逻辑运算符包括||,&&和!= ,这些操作都可以任意混合bool和tribool一起运算.
不确定状态indeterminate是一个特殊的tribool值,它与bool值true,false的运算遵循三态不二逻辑:
任何与indeterminate的比较操作结果都是indeterninate
与iddeterminate的逻辑或运算(||)只有与true运算结果为true,其他均为indeterminate
与indeterminate的逻辑与运算(&&)只有与false运算结果为false,其他均为indeterminate
indeterminate的逻辑非操作(!)结果仍为indeterminate
自由函数indeterminate()可以判断一个tribool是否处于不确定状态。
用法:#include <boost/logic/tribool.hpp>
using namespace std; int main()
{
tribool tb(true);
tribool tb2(!tb); if(tb)
{
cout<<"true"<<endl;
}
tb2 = indeterminate;
assert(indeterminate(tb2));
cout<<tb2<<endl; if(tb2 == indeterminate)
{
cout<<"indeterminate"<<endl;
}
if(indeterminate(tb2))
{
cout<<"indeterminate"<<endl;
}
cout<<(tb2 || true)<<endl;
cout<<(tb2 && false)<<endl;
}
在处理tribool的不确定状态时需要小心,因为他不是true也不是false,使用它进行条件判断永远不会成立,判断不确定状态需要使用indeterminate()函数。
boost.tribool的更多相关文章
- boost开发指南
C++确实很复杂,神一样的0x不知道能否使C++变得纯粹和干爽? boost很复杂,感觉某些地方有过度设计和太过于就事论事的嫌疑,对实际开发工作的考虑太过于理想化.学习boost本身就是一个复杂度,有 ...
- Boost简介
原文链接: 吴豆豆http://www.cnblogs.com/gdutbean/archive/2012/03/30/2425201.html Boost库 Boost库是为C++语言标准库提供扩 ...
- Boost 1.61.0 Library Documentation
http://www.boost.org/doc/libs/1_61_0/ Boost 1.61.0 Library Documentation Accumulators Framework for ...
- Boost程序库完全开发指南——深入C++“准”标准库(第3版)
内容简介 · · · · · · Boost 是一个功能强大.构造精巧.跨平台.开源并且完全免费的C++程序库,有着“C++‘准’标准库”的美誉. Boost 由C++标准委员会部分成员所设立的Bo ...
- boost库的安装,使用,介绍,库分类
1)首先去官网下载boost源码安装包:http://www.boost.org/ 选择下载对应的boost源码包.本次下载使用的是 boost_1_60_0.tar.gz (2)解压文件:tar - ...
- C++ Boost库分类总结
c# 程序员写c++,各种不适应.尤其是被内存操作和几十种字符串类型的转换,简直疯了,大小写转换竟然要手动写代码实现. Boost看介绍不错,也不知道能不能跨平台.过几天要上linux写c++, 也不 ...
- Boost 常用的库
boost是一系列C++模板库组成的免费,可移植,开源的程序库.网络上关于boost的文章已经很多. 这里摘记一些库的信息,供自己日后参考. 0.foreach - BOOST_FOREACH ...
- boost 介绍
简介: Boost库是一个可移植.提供源代码的C++库,作为标准库的后备,是C++标准化进程的开发引擎之一. Boost库由C++标准委员会库工作组成员发起,其中有些内容有望成为下一代C++标准库内容 ...
- 为 CmakeLists.txt 添加 boost 组件
目录 为 CmakeLists.txt 添加 boost 组件 Boost 常用组件 1.时间与日期 timer, date_time, chrono 2.内存管理 system 3.实用工具库 4. ...
随机推荐
- class——python编程从入门到实践
创建和使用类 1. 创建Dog类 class Dog: """一次模拟小狗的简单尝试""" def __init__(self, name, ...
- linux centos7开机自动启动程序实现
1存放脚本位置 /etc/init.d/ServerManagerCLI.sh 该脚本是自己新建的内容参看2 增加执行权限 chmod +x /etc/rc.d/init.d/ServerManage ...
- response letter
1.Firstly, we would like to thank you for your kind letter and for reviewers’ constructive commentsc ...
- SpringBoot 返回Json实体类属性大小写问题
今天碰到的问题,当时找了半天为啥前台传参后台却接收不到,原来是返回的时候返回小写,但是前台依旧大写传参. 查了很多后发现其实是json返回的时候把首字母变小写了,也就是Spring Boot中Jack ...
- Pycharm配置文档教程
1 桌面找到快捷方式 双击打开 2 3 4 需要自行注册 5 看自己喜欢选择 喜欢白色 选择左边 喜欢黑色 选择右边 6 7 可选 如果你对 Markdown 感兴趣:或者会用 就点击 install ...
- Java中Date时区的转换
1.Date中保存的是什么? 在java中,只要我们执行 Date date = new Date(); 就可以得到当前时间.如: Date date = new Date(); System.ou ...
- swagger 报错:illegal defaultValue null for param type integer
swagger(版本2.9.2) 刷新报错,错误信息如下图: 问题原因: 根据上面这句报错信息,点进去AbstractSerializableParameter.java:412可以看到 源码, @J ...
- JPA、Hibernate、Spring data jpa之间的关系,以及和springboot的整合
什么么是JPA? 全称Java Persistence API,可以通过注解或者XML描述[对象-关系表]之间的映射关系,并将实体对象持久化到数据库中. 为我们提供了: 1)ORM映射元数据:JPA支 ...
- 平衡二叉树详解——PHP代码实现
一.什么是平衡二叉树 平衡二叉树(Self-Balancing Binary Search Tree 或者 Height-Balancing Binary Search Tree)译为 自平衡的二叉查 ...
- requests模块 简单使用
目录 requests模块 简单使用 Anaconda简单了解 简单了解 requests模块 使用requests模块 爬取搜狗首页源码数据 实现一个简易的网页采集器 解决乱码问题 解决UA检测问题 ...