首页 > 编程语言 >【C++】断言、likely等

【C++】断言、likely等

时间:2022-09-02 12:46:22浏览次数:57  
标签:语句 断言 错误 C++ assert likely 条件

断言assert

就是对表达式进行判断,如果条件不成立就会调用abort()中止程序运行,对于debug空指针有奇效,但是release版本不会用

是一个宏而非函数

五个要点:

1.在函数开始时,监测参数是否合法。
2.每个断言只能检测一个条件。因为条件过多,当出现错误时,无法判断是哪个条件出错。
3.不能在断言中放入改变源程序数值的语句,例如assert(++i==3);
4.assert();语句只有在Debug版本中才能使用,而在Release版本中被无视。为了使在Debug版本和Release版本下不产生任何差别,assert()不是一个函数而是一个宏。
5.使用断言捕捉不应该发生的非法情况。不要混淆非法情况与错误情况之间的区别,后者是必然存在的并且是一定要作出处理的。
对于第5点,错误是指条件错误,比如if判断条件成立则执行,条件错误则执行别的语句,而非法的情况是指空指针这种,但凡出现了就绝对不能再运行了,这里说的非法和错误是这个意思

likely

likely包裹的条件,判断成功的可能性更大,编译时就会把条件对应的语句编译到前面去,CPU会更倾向于把这些语句读到icache

 

标签:语句,断言,错误,C++,assert,likely,条件
From: https://www.cnblogs.com/jiayu-code/p/16641956.html

相关文章

  • 在 C# CLR 中学习 C++ 之了解 extern
    一:背景在CLR源码中有很多的extern和extern"C"这样的关键词,比如下面这些代码:externsize_tgc_global_mechanisms[MAX_GLOBAL_GC_MECHANISMS_COUNT];externDWO......
  • 【C++】智能指针
    这篇讲得很好https://blog.csdn.net/sjp11/article/details/123899141?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522166201751616781790748003%2522%252C%2......
  • 35 | JAVA中的Collections(类似C++中的算法)
    CollectionsCollections是JDK提供的工具类,同样位于java.util包中。它提供了一系列静态方法,能更方便地操作各种集合。注意Collections结尾多了一个s,不是Collection!我们一......
  • 23 | JAVA集合简介(C++容器)
    集合简介C++中将容器分成三类:顺序、关联、hash。容器在JAVA中映射为集合。等号左边(接口)等号右边(实现)ListArrayList/LinkedListSetHashSet/TreeSet......
  • C++左值、右值引用
    概念左值与右值是相对于赋值运算符(=)与累加运算符(+=),以下内容统称为运算符。左值:存放于运算符左边的值,凡是能取地址(&)都是左值。右值:存放于运算符右边的值,不能取地址(&)都是......
  • C/C++中的自增自减运算符的前置后置问题
    前言在准备秋招的过程中,遇到双指针问题,发现自增自减运算符的前后置对于问题的解决有很大的影响,故写此文作为总结,方便后续查阅。正文一、前置后置的区别自增自减操作符......
  • c++常量引用容易踩的坑,修改数据不同步
    正常情况下被引用的对象改变,常量引用的值也跟着改变。i和j是同一个对象,所以是同步的:inti=42;constint&j=i;i=43;cout<<j<<endl;cout<<i<<endl;//......
  • C++ 打印杨辉三角/贾宪三角/帕斯卡三角
    #include<iostream>#include<iomanip>#include<windows.h>#include<fstream>#include<string>usingnamespacestd;#defineN10intmain(){inta[N][N......
  • C++正则匹配字符串
    以下实例使用C++正则从一串混乱的字符串中匹配带小数点的数字点击查看代码#include<iostream>#include<regex>usingnamespacestd;intmain(){smatchres......
  • C++ 之lambda表达式
    C++之lambda表达式[capture](parameters)option->return-type{body}capture:捕获列表,可选捕捉列表总是出现在lambda表达式的开始。实际上,是lambda引出符,编译......