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)

大家都在看

  • C++11智能指针处理Array对象

    //C++11的//完全可以避免写手动的delete代码,//但是它默认使用delete删除对象,//如果是数组对象,需要指定自定义的删除方法,支持delete[]std::sha…

    C++ 2023年5月29日
    039
  • [C++]一份Linq to object的C++实现

    几个月的构想+0.5小时的设计+4小时的linq.h编码+3小时的测试编码。 大量使用C++11的特性,在GCC 4.7.2下编译通过。 关于实现相关的描述就不说了,我表达能力差,…

    C++ 2023年5月29日
    046
  • C++经典案例

    per-thread的单例模式 //单例子模式,per-thread的单例模式 IPCThreadState* IPCThreadState::self() //IPCThread…

    C++ 2023年5月29日
    056
  • C++中的float&double的存储原理

    参考:https://cloud.tencent.com/developer/article/1473541 对于任何数字表示成二进制科学计数法以后,一定是1点几(尾数)乘以2的多…

    C++ 2023年5月29日
    040
  • 【C++服务端技术】队列

    链表和锁实现的队列,锁的代码请看其他文章 #pragma once #include #include "AutoLock.h" namespace Extra…

    C++ 2023年5月29日
    048
  • 《转载》强大全面的C++框架和库推荐!

    关于 C++ 框架、库和资源的一些汇总列表,内容包括:标准库、Web应用框架、人工智能、数据库、图片处理、机器学习、日志、代码分析等。 标准库 C++标准库,包括了STL容器,算法…

    C++ 2023年5月29日
    066
  • C++教程详解

    第一篇:基础篇 简介、环境配置、基本语法、注释、数据类型、变量类型、变量作用域、常量、修饰符类型、 存储类、运算符、循环、判断、函数、数字、数组、字符串、指针、引用、日期&…

    C++ 2023年5月29日
    079
  • C++:vector中的resize()函数 VS reserve()函数

    http://www.cplusplus.com/reference/vector/vector/vector/ 写代码的时候无意错用了这两个函数 导致测试的时候,程序运行崩溃 发…

    C++ 2023年5月29日
    053
  • Model/View结构(整理自<Qt5.9 C++开发指南>)

    数据模型 数据不仅可以存储在数据模型中,数据可以是其他类,文件,数据库或任何数据源. 视图组件 那些带View的类; 在显示数据时,调用setModel()函数,为自己设置一个数据…

    C++ 2023年5月29日
    064
  • C/C++中static,const,inline三种关键字的总结(参照网络)

    一、 关于staticstatic 是C++中很常用的修饰符,它被用来控制变量的存储方式和可见性,下面我将从 static 修饰符的产生原因、作用谈起,全面分析static 修饰符…

    C++ 2023年5月29日
    065
  • [C++] const和mutable关键字使用方法

    const 修饰的变量为常成员变量,表示此变量不能被修改赋值,并且构造函数中只能用初始化列表的方式初始化,其他初始化方式都是错误的 const 修饰的函数为常成员函数,表示此函数中…

    C++ 2023年5月29日
    062
  • 【转】C++智能指针的正确使用方式

    对象所有权 首先需要理清楚的概念就是对象所有权的概念。所有权在 rust 语言中非常严格,写 rust 的时候必须要清楚自己创建的每个对象的所有权。 但是 C++ 比较自由,似乎我…

    C++ 2023年5月29日
    053
  • (筆記) 常用設定暫存器值的編程技巧 (SOC) (C/C++) (C) (Verilog)

    Abstract設定暫存器值是寫firmware時最常見的控制,本文歸納出C語言在寫firmware時常見的編程技巧,並與Verilog相互對照。 Introduction本文將討…

    C++ 2023年5月29日
    082
  • !! vc C++ VS2017检查内存泄漏具体到某一行代码

    VLD工具可以用来检查VS C++程序的内存泄露。 VLD官网:https://kinddragon.github.io/vld/ 官网不方便下载的,可以用我的链接:https:/…

    C++ 2023年5月29日
    044
  • EclipseC++学习笔记-9 将文件从项目中排除与恢复

    选中文件,取消Debug,Release勾选如果需要恢复,勾选Debug,Release即可。这样可以方便进行多个带main源码测试。 本博客是个人工作中记录,遇到问题可以互相探讨…

    C++ 2023年5月29日
    054
  • C++多线程库的常用类 std::mutex

    格式:类名 + 头文件 + 用例 + 解释说明 解释说明: std::mutex C++提供的互斥量,用在多线程编程中,来保护共享数据。 C++中通过实例化 std::mutex创…

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