boost.assert提供的主要工具是BOOST_ASSERT宏,类似于C语言的assert,提供运行时的断言,但功能有所增强;
默认情况下,BOOST_ASSERT宏等同于assert宏: # define BOOST_ASSERT(expr) assert(expr);
BOOST_ASSERT宏仅会在Debug模式下起作用,在Release模式下不会被编译,不会影响运行效率;
BOOST_ASSERT宏是标准断言宏assert的增强版本,使用更加灵活;
定义BOOST_DISABLE_ASSERTS宏可禁止BOOST_ASSERT作用,但assert宏不会受影响;
定义BOOST_ENABLE_ASSERT_HANDLER宏将导致BOOST_ASSERT的行为发生改变;

BOOST_VERIFY宏是assert库提供的另一种工具,断言表达式一定会被求值,其余与BOOST_ASSERT行为相同。

assert与BOOST_ASSERT是运行时断言,但有时候运行时已经很晚了,程序已经发生了无可挽回的错误;
static_assert库能够把断言诊断的时刻由运行时提前到编译期,增加程序的健壮性;
BOOST_STATIC_ASSERT是一个编译期断言,使用typedef和模板元技术实现;
BOOST_STATIC_ASSERT可以出现在程序的任何位置:命名空间中、类中、函数中.

 C++ Code 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
 
/*
    boost.assert提供的主要工具是BOOST_ASSERT宏,类似于C语言的assert,提供运行时的断言,但功能有所增强;
    默认情况下,BOOST_ASSERT宏等同于assert宏: # define BOOST_ASSERT(expr) assert(expr);
    BOOST_ASSERT宏仅会在Debug模式下起作用,在Release模式下不会被编译,不会影响运行效率;
    BOOST_ASSERT宏是标准断言宏assert的增强版本,使用更加灵活;
    定义BOOST_DISABLE_ASSERTS宏可禁止BOOST_ASSERT作用,但assert宏不会受影响;
    定义BOOST_ENABLE_ASSERT_HANDLER宏将导致BOOST_ASSERT的行为发生改变;
    
    BOOST_VERIFY宏是assert库提供的另一种工具,断言表达式一定会被求值,其余与BOOST_ASSERT行为相同。

assert与BOOST_ASSERT是运行时断言,但有时候运行时已经很晚了,程序已经发生了无可挽回的错误;
    static_assert库能够把断言诊断的时刻由运行时提前到编译期,增加程序的健壮性;
    BOOST_STATIC_ASSERT是一个编译期断言,使用typedef和模板元技术实现;
    BOOST_STATIC_ASSERT可以出现在程序的任何位置:命名空间中、类中、函数中.
*/

/************************************************************************/
/* C++ stl Library                                                        */
/************************************************************************/
#include <iostream>
#include <string>

/************************************************************************/
/* C++ boost Library                                                   */
/************************************************************************/
#define BOOST_DISABLE_ASSERTS               //禁用BOOST_ASSERT
#define BOOST_ENABLE_ASSERT_HANDLER         //为BOOST_ASSERT添加handler
#include <boost/assert.hpp>
#include <boost/format.hpp>
#include <boost/static_assert.hpp>
#include <cassert>
using namespace std;

namespace boost
{
    void assertion_failed(char const * expr, char const * function, char const * file, long line)
    {
        boost::format fmt("Assertion Failed!\nExpression: %s\nFunction: %s\nFile: %s\nLine: %ld\n\n");
        fmt % expr% function% file% line;
        cout << fmt;
    }
}

template<typename T>
void print(T &tok)
{
    for(BOOST_AUTO(pos, tok.begin()); pos != tok.end(); pos++)
    {
        cout << "[" << *pos << "]" ;
    }
    cout << endl;
}

double func(int x)
{
    BOOST_ASSERT(x !=  && "divided by zero!");
    /x;
}

int main(void)
{
    BOOST_ASSERT( == 0x10);
    //assert(16 == 0x11);
    //BOOST_ASSERT(string().size() == 1);
    //func(0);

;
    string str("Michael Joessy!");
    BOOST_VERIFY(nLen = str.length());
    cout << "length of str is " << nLen << endl;

BOOST_STATIC_ASSERT( == sizeof(short));
    //BOOST_STATIC_ASSERT(3 == sizeof(short));

cin.get();
    ;
}

boost诊断工具BOOST_ASSERT、BOOST_VERIFY、BOOST_STATIC_ASSERT的更多相关文章

  1. C++ 之Boost 实用工具类及简单使用

    本文将介绍几个 Boost 实用工具类,包括 tuple.static_assert.pool.random 和 program_options等等.需要对标准 STL 具备一定的了解才能充分理解本文 ...

  2. [转]linux 系统监控、诊断工具之 IO wait

    1.问题: 最近在做日志的实时同步,上线之前是做过单份线上日志压力测试的,消息队列和客户端.本机都没问题,但是没想到上了第二份日志之后,问题来了: 集群中的某台机器 top 看到负载巨高,集群中的机器 ...

  3. [转]网络诊断工具:MTR

    MTR是Linux平台上一款非常好用的网络诊断工具,集成了traceroute.ping.nslookup的功能,用于诊断网络状态非常有用.能按要求对路由中所有节点进行批量测试 第一列(Host):I ...

  4. 使用vs自带的性能诊断工具

    visual studio是个强大的集成开发环境,内置了程序性能诊断工具.下面通过两段代码进行介绍. static void Main( string[] args) { Test1(); Test2 ...

  5. Linux 系统监控和诊断工具:lsof

    1.lsof 简介 lsof 是 Linux 下的一个非常实用的系统级的监控.诊断工具. 它的意思是 List Open Files,很容易你就记住了它是 “ls + of”的组合~ 它可以用来列出被 ...

  6. Linux 下的一个全新的性能测量和调式诊断工具 Systemtap, 第 3 部分: Systemtap

    Systemtap的原理,Systemtap与DTrace比较,以及安装要求和安装步骤本系列文章详细地介绍了一个Linux下的全新的调式.诊断和性能测量工具Systemtap和它所依赖的基础kprob ...

  7. Linux 下的一个全新的性能测量和调式诊断工具 Systemtap, 第 2 部分: DTrace

    DTrace的原理本系列文章详细地介绍了一个 Linux 下的全新的调式.诊断和性能测量工具 Systemtap 和它所依赖的基础 kprobe 以及促使开发该工具的先驱 DTrace 并给出实际使用 ...

  8. Linux 下的一个全新的性能测量和调式诊断工具 Systemtap,第 1 部分: kprobe

    kprobe 的原理.编程接口.局限性和使用注意事项 本系列文章详细地介绍了一个Linux下的全新的调式.诊断和性能测量工具Systemtap和它所依赖的基础kprobe以及促使开发该工具的先驱DTr ...

  9. 中小研发团队架构实践之生产环境诊断工具WinDbg

    生产环境偶尔会出现一些异常问题,WinDbg或GDB是解决此类问题的利器.调试工具WinDbg如同医生的听诊器,是系统生病时做问题诊断的逆向分析工具,Dump文件类似于飞机的黑匣子,记录着生产环境程序 ...

随机推荐

  1. [Android] SQLite数据库之增删改查基础操作

        在编程中常常会遇到数据库的操作,而Android系统内置了SQLite,它是一款轻型数据库,遵守事务ACID的关系型数据库管理系统,它占用的资源非常低,可以支持Windows/Linux/Un ...

  2. C Python类型互换

    从Python到C的转换用PyArg_Parse*系列函数,int PyArg_ParseTuple():把Python传过来的参数转为C:int PyArg_ParseTupleAndKeyword ...

  3. Drupal启动阶段之四:系统变量

    Drupal的系统变量是指保存在后台数据库variable表中的一些参数设置,透过variable_get()和variable_set()存取: 先看一看_drupal_bootstrap_vari ...

  4. iOS 移动端生成工具开发

    代码地址如下:http://www.demodashi.com/demo/11284.html 一.准备工作 编译环境 xcode 用于生成冗余架构代码, 实现生成零耦合架构 二.程序实现 上个月的一 ...

  5. Arm Cache学习总结

    cache,高速缓存,其原始意义是指访问速度比一般随机存取内存(RAM)快的一种RAM,通常它不像系统主存那样使用DRAM技术,而使用昂贵但较快速的SRAM技术. 1.cache映射方式 cache中 ...

  6. EMQ学习笔记---Clean Session和Retained Message

    MQTT会话(Clean Session)MQTT客户端向服务器发起CONNECT请求时,可以通过’Clean Session’标志设置会话.‘Clean Session’设置为0,表示创建一个持久会 ...

  7. vivado sdk生成elf文件出错:make: Interrupt/Exception caught (code = 0xc00000fd, addr = 0x4227d3)

    vivado sdk生成elf文件出错:make: Interrupt/Exception caught (code = 0xc00000fd, addr = 0x4227d3) Might be a ...

  8. eclipse 启动时使用指定的jdk

    -vmD:/DevPrograms/Java/jdk1.5.0_22/bin/javaw.exe-startupplugins/org.eclipse.equinox.launcher_1.1.1.R ...

  9. Swift中UIView类方法(animateWithDuration)的使用

    需求:利用Swift语言实现OC语言中UIView类方法 [UIView animateWithDuration:0.5 animations:^{ bgView.alpha= 1; }]; 在Swi ...

  10. tensorflow 之模型的保存与加载(一)

    怎样让通过训练的神经网络模型得以复用? 本文先介绍简单的模型保存与加载的方法,后续文章再慢慢深入解读. #!/usr/bin/env python3 #-*- coding:utf-8 -*- ### ...