zoukankan      html  css  js  c++  java
  • C++11 静态断言 static_assert

     

     静态断言,不能用于变量断言,在编译时断言。

    我们知道,C++现有的标准中就有assert、#error两个方法是用来检查错误的,除此而外还有一些第三方的静态断言实现。

    assert是运行期断言,它用来发现运行期间的错误,不能提前到编译期发现错误,也不具有强制性,也谈不上改善编译信息的可读性。

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

    语法:

    static_assert(常量表达式,"提示字符串")

    使用static_assert,可以在编译期发现更多的错误,用编译器来强制保证一些契约,帮助我们改善编译信息的可读性,尤其是用于模板时。

    使用注意点:

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

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

    //该static_assert用来确保编译仅在32位的平台上进行,不支持64位的平台
    //该语句可放在文件的开头处,这样可以尽早检查,以节省失败情况下耗费的编译时间
    static_assert(sizeof(int) == 4, "64-bit code generation is not supported.");

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

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

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

  • 相关阅读:
    kafka参数解析+启动参数解析
    flume参数解析+启动参数解析
    flume+flume+kafka消息传递+storm消费
    C++快速读取大文件
    阿里云ecs : Couldn't connect to host, port: smtp.aliyun.com, 25; timeout -1;
    对渲染相关操作封装的类库
    51nod-1134 最长递增子序列,用线段树将N^2的dp降到NlogN
    51nod-1503 猪和回文
    51nod1073-约瑟夫环,递归。
    算法基础题
  • 原文地址:https://www.cnblogs.com/liaocheng/p/15701175.html
Copyright © 2011-2022 走看看