C++11 static_assert

1。assert是动态断言,运行期检查,影响性能,故debug版本检查,release关闭。

2。C++11中引入了static_assert这个关键字,用来做编译期间的断言,因此叫作静态断言。

注解:如果第一个参数常量表达式的值为false,会产生一条编译错误。错误位置就是该static_assert语句所在行,第二个参数就是错误提示字符串。

[1]使用范围:static_assert可以用在全局作用域中,命名空间中,类作用域中,函数作用域中,几乎可以不受限制的使用。

[2]常量表达式:static_assert的断言表达式的结果必须是在编译时期可以计算的表达式,即必须是常量表达式,示例如下:

如果读者使用了变量,则会导致错误。示例如下:

n作为一个变量,在编译期根本无法确定值(无能为力),估属于应用错误范畴。

[3]模板参数:编译器在遇到一个static_assert语句时,通常立刻将其第一个参数作为常量表达式进行演算。

但如果该常量表达式依赖于某些模板参数,则延迟到模板实例化时再进行演算,这就让检查模板参数也成为了可能。

示例如下:

[4]性能方面:由于static_assert是编译期间断言,不生成目标代码,因此static_assert不会造成任何运行期性能损失。

leveldb的代码用到了大量的assert and static_assert.

Original: https://www.cnblogs.com/kex1n/p/13054804.html
Author: 小 楼 一 夜 听 春 雨
Title: C++11 static_assert

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/535376/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • Kruskal算法(二)之 C++详解

    在含有n个顶点的连通图中选择n-1条边,构成一棵极小连通子图,并使该连通子图中n-1条边上权值之和达到最小,则称其为连通网的最小生成树。 例如,对于如上图G4所示的连通网可以有多棵…

    C++ 2023年5月29日
    066
  • 聊聊 C++ 中的四种类型转换符

    一:背景 在玩 C 的时候,经常会用 void* 来指向一段内存地址开端,然后再将其强转成尺度更小的 char* 或 int* 来丈量一段内存,参考如下代码: int main()…

    C++ 2023年5月29日
    077
  • C#与C++之间类型的对应

    Windows Data Type .NET Data Type BOOL, BOOLEAN Boolean or Int32 BSTR String BYTE Byte CHAR…

    C++ 2023年5月29日
    090
  • c++ 条件变量

    http://blog.csdn.net/hemmanhui/article/details/4417433 互斥锁:用来上锁。 条件变量:用来等待,当条件变量用来自动阻塞一个线程…

    C++ 2023年5月29日
    051
  • WIN部分程序调用VS C++库导致提示报错R6034解决方法

    最近电脑上的部分软件运行的时候有时候会报错R6034,猜测可能是软件安装冲突导致 可能是因为软件在调用VS C++runtime error库的dll文件的时候找不到或者找到了错误…

    C++ 2023年5月29日
    091
  • C++实现二次、三次B样条曲线

    下面是一个有四个控制点的Bezier 曲线: 可以通过改变一个控制点的位置来改变曲线的形状,比如将上图曲线中左边第二个控制点往上移,就可以得到下面的曲线: 可以看到,这种曲线生成方…

    C++ 2023年5月29日
    052
  • [C++] namespace命名空间和using用法

    命名空间namespace:指标识符的各种可见范围。 C++标准程序库中的所有标识符都被定义在一个std的namespace,这就是程序开始添加 using namespace s…

    C++ 2023年5月29日
    069
  • 老牌C/C++ IDE——DEV C++有新的大版本了

    序: 这个软件也是有相当历史了,可以追溯到win98时代,1998年就已经发布第一版本了,其中4.9.9.2版本是最经典的,网上镜像应该是最多的,这个版本才10M大小,后面版本都是…

    C++ 2023年5月29日
    065
  • 【转】C++11 新特性总结

    其他路径: CSDN: https://blog.csdn.net/wodehao0808 微信公众号:程序喵星人 更多资源和视频教程,QQ:1902686547 前言 转载请注明…

    C++ 2023年5月29日
    075
  • C++ 有向图最短路径之Dijkstra算法

    摘自:https://blog.csdn.net/chuanzhouxiao/article/details/88831371 一、思路 1.Dijkstra算法 每次都是从起始顶…

    C++ 2023年5月29日
    0109
  • 对指针和引用的理解(c++)

    1.指针 typedef说明一种新类型名,来代替已有类型名。 a.案例:typedef char String_t和#define String_d char 这两句在使用上的区别…

    C++ 2023年5月29日
    070
  • C++深拷贝与浅拷贝

    对于普通类型的对象来说,它们之间的复制是很简单的,例如:int a=88;int b=a;而类对象与普通对象不同,类对象内部结构一般较为复杂,存在各种成员变量。下面看一个类对象拷贝…

    C++ 2023年5月29日
    050
  • C++ 使用静态链接库和动态链接库

    C++ 使用AdbHelper静态链接库 ## 必备文件:静态库AdbHelper.h,AdbHelper.lib以及动态库AdbHelper.dll ##   资源文件使用用法:…

    C++ 2023年5月29日
    061
  • c++对象工厂

    一.简单工厂 #pragma once struct IObjectA { virtual void Test1()=0; }; class ObjectA:public IObj…

    C++ 2023年5月29日
    069
  • UNITY 手游(安卓)如何使用C/C++代码

    解决方案:将C/C++代码编译成so供C#代码调用。 SO生成工具:android studio,简称AS 一,so 生成方法: 1,菜单:File->New->New…

    C++ 2023年5月29日
    088
  • C++源码—_Ptr_base(MSVC 2017)

    1 _Ptr_base _Ptr_base 是智能指针的基类,它包含两个成员变量: 指向目标元素的指针 _Ptr 和 引用计数基类指针 _Rep。 _Ptr 指向的元素类型为 us…

    C++ 2023年5月29日
    077
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球