C++之断言、静态断言

断言

定义

断言(assertion)是一种常用的编程手段,用于排除程序中不应该出现的逻辑错误。
使用断言需要包含头文件<cassert>或<assert.h>,头文件中提供了带参数的宏assert,用于程序在运行时进行断言。
语法:assert(表达式);
断言就是判断(表达式)的值,如果为0(false),程序将调用abort()函数中止,如果为非0(true),程序继续执行。
断言可以提高程序的可读性,帮助程序员定位违反了某些前提条件的错误。

注意:

  • 断言用于处理程序中不应该发生的错误,而非逻辑上可能会发生的错误。

  • 不要把需要执行的代码放到断言的表达式中。

  • 断言的代码一般放在函数/成员函数的第一行,表达式多为函数的形参。

案例

#include <iostream>
#include <cassert>              // 断言assert宏需要包含的头文件。
using  namespace std;
void  copydata(void* ptr1, void* ptr2)   // 把ptr2中的数据复制到ptr1中。
{
    assert(ptr1 && ptr2);  // 断言ptr1和ptr2都不会为空。
    cout << "继续执行复制数据的代码......" << endl;
}
int main()
{
    int ii = 0, jj = 0;
    copydata(&ii, &jj);  // 把ptr2中的数据复制到ptr1中。
}

静态断言

定义

assert宏是运行时断言,在程序运行的时候才能起作用。
C++11新增了静态断言static_assert,用于在编译时检查源代码。
使用静态断言不需要包含头文件。
语法:static_assert(常量表达式,提示信息);
注意:static_assert的第一个参数是 常量表达式。而assert的表达式既可以是常量,也可以是变量。

案例

#include <iostream>
using  namespace std;
int main()
{
    const int ii = 0;
    static_assert(ii, "ii的值不合法:");
}

返回结果

当ii=0时,提示:静态断言失败,原因时“ii?????????????"
当ii=1时,编译成功

这里不必纠结,我们在linux系统测试当ii=0时编译成功,开发中更多的是用linux,所以不必纠结。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小谢%同学

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值