当前位置: 首页 > news >正文

断言及静态断言

在c++11之前就已经有了断言,但是不是静态断言。

断言

断言是一种编程中常用的手段。在通常情况下,断言就是将一个返回值总是需要为真的判断表达式放在语句中,用于排除在设计的逻辑上不应该产生的情况。

一个函数总需要输入在一定的范围内的参数,那么程序员就可以对该参数使用断言,以迫使在该参数发生异常的时候程序退出,从而避免程序陷入逻辑的混乱。

从一些意义上讲,断言并不是正常程序所必需的,不过对于程序调试来说,通常断言能够帮助程序开发者快速定位那些违反了某些前提条件的程序错误。

如果我们要在C++程序中使用断言,需要在程序中包含头文件<cassert><assert.h>,头文件中为我们提供了 assert 宏,用于在运行时进行断言。

举例说明:下面的代码将创建一个数组,但是如果数组的size小于等于0,这个数组将无法被创建,那么用assert捕捉中断程序。

#include <iostream>
#include <cassert>
using namespace std;char* createArray(int size) {  //创建一个指定size大小的char类型数组assert(size > 0); //通过断言判断数组大小是否大于0    必须大于0,否则程序中断char* array = new char[size];return array;
}int main() {char* buf = createArray(10);system("pause");return 0;
}

在程序的第6行,使用了断言assert(expression) ,这是一个宏,它的参数是一个表达式,这个表达式通常返回一个布尔类型的值,并且要求表达式必须为 true 程序才能继续向下执行,否则会直接中断。

如果createArray参数size>0 , 程序正常运行直到结束。

如果createArray参数size<=0 , 程序会中断。

但是上面的断言必须在执行之后才能知道,在编译之后也不会知道这个断言的结果。这意味着不运行程序我们将无法得知某些条件是否是成立的。比如操作系统的类型,是win还是linux。

静态断言

c++11提供了静态断言

静态断言static_assert(断言表达式,警告信息字符串)

所谓静态就是在编译时就能够进行检查的断言,而不是只有在执行之后才得知结果,使用时不需要引用头文件

静态断言的另一个好处是,可以自定义违反断言时的错误提示信息。

静态断言使用起来非常简单,它接收两个参数:

  • 参数1:断言表达式,这个表达式通常需要返回一个 bool值;
  • 参数2:警告信息字符串,它通常就是一段字符串,在违反断言(表达式为false)时提示该信息。

这样就可以在执行之前就知道操作系统是32位的win还是64位的linux:

#include <iostream>
using namespace std;int main() {//static_assert(断言的条件,断言的提示信息,)static_assert(sizeof(long) == 8, "当前操作系统不是64位的"); //在win中这行代码会报错,但是在linux中不会。cout << "Hello world " << endl;   //用来看看是不是能执行之后的代码return 0;
}

补充32位系统和64位系统的数据类型对比:

整型名称 (> 16 位 Windows)占用字节数
[数据范围]
(32 位 Linux)占用字节数
[数据范围]
(64 位 Linux)占用字节数
[数据范围]
int(signed 、signed int) 4字节
[-231,231-1]
INT_MIN=-2147483648
INT_MAX=2147483647
4字节
[-231,231-1]
INT_MIN=-2147483648
INT_MAX=2147483647
4字节
[-231,231-1]
INT_MIN=-2147483648
INT_MAX=2147483647
unsigned int(unsigned) 4字节
[0,232-1]
UINT_MAX=4294967295
4字节
[0,232-1]
UINT_MAX=4294967295
4字节
[0,232-1]
UINT_MAX=4294967295
short(short int、signed short 、signed short int) 2字节
[-215,215-1]
SHRT_MIN=-32768
SHRT_MAX=32767
2字节
[-215,215-1]
SHRT_MIN=-32768
SHRT_MAX=32767
2字节
[-215,215-1]
SHRT_MIN=-32768
SHRT_MAX=32767
unsigned short(unsigned short int) 2字节
[0,216-1]
USHRT_MAX=65535
2字节
[0,216-1]
USHRT_MAX=65535
2字节
[0,216-1]
USHRT_MAX=65535
long(long int、signed long、signed long int) 4字节
[-231,231-1]
LONG_MIN=-2147483648
LONG_MAX=2147483647
4字节
[-231,231-1]
LONG_MIN=-2147483648
LONG_MAX=2147483647
8字节
[-263,263-1]
LONG_MIN=-9223372036854775808
LONG_MAX=9223372036854775807
unsigned long(unsigned long int) 4字节
[0,232-1]
ULONG_MAX=4294967295
4字节
[0,232-1]
ULONG_MAX=4294967295
8字节
[0,264-1]
ULONG_MAX=18446744073709551615
long long(long long int、signed long long、signed long long int) 8字节
[-263,263-1]
LLONG_MIN=-9223372036854775808
LLONG_MAX=9223372036854775807
8字节
[-263,263-1]
LLONG_MIN=-9223372036854775808
LLONG_MAX=9223372036854775807
8字节
[-263,263-1]
LLONG_MIN=-9223372036854775808
LLONG_MAX=9223372036854775807
unsigned long long(unsigned long long int) 8字节
[0,264-1]
ULLONG_MAX=18446744073709551615
8字节
[0,264-1]
ULLONG_MAX=18446744073709551615
8字节
[0,264-1]
ULLONG_MAX=18446744073709551615
*(指针变量) 4字节 4字节 8字节
http://www.jsqmd.com/news/342064/

相关文章:

  • 许昌英语雅思培训机构推荐.2026权威测评出国雅思辅导机构口碑榜 - 苏木2025
  • 许昌英语雅思培训机构推荐,2026权威测评出国雅思辅导机构口碑榜 - 苏木2025
  • 2026年谷歌海外GEO优化外贸推广服务商/公司测评:深圳昊客网络脱颖而出 - 深圳昊客网络
  • 阿里云渠道商:阿里云弹性伸缩如何助力海量数据采集?
  • .NET 中如何快速实现 List 集合去重?
  • 扣子Coze实战:从0到1打造抖音+小红书热点监控智能体
  • 许昌英语雅思培训机构推荐;2026权威测评出国雅思辅导机构口碑榜 - 苏木2025
  • 选水浴\全温\气浴恒温振荡器,认准这些性能好的厂家! - 品牌推荐大师
  • Chebyshev Polynomials 与现代计算
  • 2026年龙门吊厂家综合对比:电动/无轨/单梁/集装箱龙门吊多场景应用分析 - 品牌推荐官
  • 毕业论文神器!实力封神的AI论文软件 —— 千笔写作工具
  • [信息论与编码理论专题-13]:如果说信息论使计算机实现人的思维提供了理论基础,那么什么理论使得计算机AI可以实现人的意识提供理论基础呢?
  • PostgreSQL、达梦、高斯、MySQL 区别
  • 2026国内最新云顶棉生产厂家top5推荐!广东广州等地优质云顶棉公司榜单发布,全品类服务双优助力服装产业升级 - 品牌推荐2026
  • C++成员访问权限以及继承权限
  • 数据驱动,安全可控:2026年企业智能BI私有化部署实力厂商推荐指南 - 品牌2025
  • 浙江餐饮业擦手纸推荐品牌 - 中媒介
  • 2026 AIGC 降重实用软件推荐(免费 + 高性价比)
  • 学习SQL心得
  • 2026户外微型水质在线监测系统(监测站)行业深度解析与优质厂家全景推荐 - 品牌推荐大师
  • 抗噪4键触摸感应玩具触摸芯片VK36N4B抗干扰4通道触摸芯片原厂提供技术支持
  • 学霸同款9个降AI率网站,千笔·降AIGC助手帮你精准降AIGC
  • 贴身定制,敏捷响应:2026年更懂本地化需求的BI部署方案商推荐名单 - 品牌2025
  • 2026年深圳到兰州整车运输公司推荐:到济南整车运输/到成都整车运输/到长沙整车运输/到福州整车运输/到西宁整车运输精选 - 品牌推荐官
  • gRPC C++ 快速编译与上手
  • STM32启动文件
  • 老字号制药企业有哪些?十大国民老厂盘点,藏着国人的健康底气 - 博客万
  • 2026年工业货架选购指南:性价比与品质如何兼得 - 2026年企业推荐榜
  • ‌商用擦手纸品牌排行 - 中媒介
  • 专精于一处,极致于体验:2026年深度集成的Deepseek知识库部署服务商精选推荐 - 品牌2025