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/
转载文章受原作者版权保护。转载请注明原作者出处!