c++11中静态断言static_assert

c++11中的静态断言(static_assert)

在c++11中引入了,目的是在编译时就能检查处一些问题。写法如下:

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

 

如果第一个参数常量表达式的值为真(true或者非零值),那么static_assert不做任何事情,就像它不存在一样,否则会产生一条编译错误,错误位置就是该static_assert语句所在行,错误提示就是第二个参数提示字符串。

 

非常简单的例子如下:

int main () {static_assert(1 != 1, "1 == 1 is true.");return 0;
}

结果:In function 'int main()': 29:5: error: static assertion failed: 1 == 1 is true.

编译不通过。

 

优点如下:

1,使用static_assert,我们可以在编译期间发现更多的错误,提前找出错误的原因。

2,static_assert可以用在全局作用域中,命名空间中,类作用域中,函数作用域中,几乎可以不受限制的使用。

3,编译器在遇到一个static_assert语句时,通常立刻将其第一个参数作为常量表达式进行演算,但如果该常量表达式依赖于某些模板参数,则延迟到模板实例化时再进行演算,这就让检查模板参数成为了可能。

4,由于之前有望加入C++0x标准的concepts提案最终被否决了,因此对于检查模板参数是否符合期望的重任,就要靠static_assert来完成了,所以如何构造适当的常量表达式,将是一个值得探讨的话题。

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

在一些开源的代码中,使用到了静态断言,例如:rocksdb、mysql等,其中mysql中的table_helper.cc中的一个函数的例子如下:

void set_field_mdl_type(Field *f, opaque_mdl_type mdl_type) {static_assert(MDL_TYPE_END == 11,"Adjust performance schema when changing enum_mdl_type");// ...// ...
}

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/462845.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

setBackgroundResource的一个问题

2019独角兽企业重金招聘Python工程师标准>>> 一&#xff0c;<RelativeLayout xmlns:android"http://schemas.android.com/apk/res/android" android:id"id/layout" android:layout_width"fill_parent" android:layout_height…

驅動開發學習筆記1

1&#xff1a;設備對象是系統為幫組軟件管理硬件而創建的數據結構&#xff0c;一個物理硬件可以有多個這樣的數據結構。處於堆棧最底層的設備對象稱為物理設備對象&#xff08;PDO&#xff09;; 2&#xff1a;操作系統的pnp管理器按照設備驅動程序的要求構造了設備對象堆棧。總…

c++11之std::move()

在c11中引入了std::move()&#xff0c;目的是将左值转换为右值&#xff0c;一般与右值引用一起使用。 先说下左值与右值的区别&#xff1a; 左值&#xff1a;能被赋值的值&#xff0c;能取到地址的值。例如&#xff1a; int a 100; 右值&#xff1a;临时值&#xff0c;取不到…

Memcache应用场景

Memcache应用场景介绍面临的问题对于高并发高访问的Web应用程序来说&#xff0c;数据库存取瓶颈一直是个令人头疼的问题。特别当你的程序架构还是建立在单数据库模式&#xff0c;而一个数据池连接数峰 值已经达到500的时候&#xff0c;那你的程序运行离崩溃的边缘也不远了。很多…

21.判断栈弹出顺序是否正确

题目描述&#xff1a; 输入两个整数序列&#xff0c;第一个序列表示栈的压入顺序&#xff0c;请判断第二个序列是否可能为该栈的弹出顺序。假设压入栈的所有数字均不相等。例如序列1,2,3,4,5是某栈的压入顺序&#xff0c;序列4,5,3,2,1是该压栈序列对应的一个弹出序列&#xff…

mingw + msys 上编译 ffmpeg

下载以下文件 mingw msys msysdtk ffmpeg-0.6.1 1.安装 mingw &#xff0c;一路next d:\mingw 2.安装 msys &#xff0c;msysdtk 到同样的路径下,比如:d:\msys\1.0&#xff0c;ffmpeg需要用到perl&#xff0c;刚好msysdtk中有 3.整合 msys 和 mingw 创建文件 d:\msys\1.0\…

双向长短期神经网络(Bi-LSTM)-多输入时序预测

目录 一、程序及算法内容介绍&#xff1a; 基本内容&#xff1a; 亮点与优势&#xff1a; 二、实际运行效果&#xff1a; 三、部分代码展示&#xff1a; 四、完整代码下载&#xff1a; 一、程序及算法内容介绍&#xff1a; 基本内容&#xff1a; 本代码基于Matlab平台编…

C++类中protected访问权限问题

在c中&#xff0c;protected修饰的成员属性和成员函数的访问权限&#xff1a; (1)、本类中的成员函数(public/private/protected修饰的函数) (2)、友元函数和友元类 (3)、派生类中的成员函数可以访问对应基类中的protected成员属性和成员函数。 #include <iostream> …

微软的云笔记:OneNote+SkyDrive

OneNote是微软的一款笔记软件&#xff08;如果单说功能要绝对要比EverNote强大多了&#xff09;&#xff0c;它可以让你随时记录各种文字、图片&#xff0c;同时在格式排版方面它也继承了Word的强大编辑功能。但是随着各种移动办公需求的产生OneNote这种本地化的保存方式确实在…

【转】温州的南拳

南拳和北腿少林武当功太极八卦连环掌中华有神功在我国传统武术中素有南拳和北腿之分&#xff0c;实际上这种分法点出了我国南北地域拳风的特点&#xff0c;南方的拳术沉马寸劲、迅疾紧凑、重拳厉掌&#xff0c;着眼在拳&#xff1b;北方的拳路却是阔幅舒展、大开大合&#xff0…

day05-数据类型与操作

转载于:https://www.cnblogs.com/klw1/p/10727073.html

mysql 8.0 一条insert语句的具体执行流程分析(一)

最近在mysql 8.0的代码上开发新的功能的时候&#xff0c;梳理了insert语句的执行过程&#xff0c;由于insert语句比较复杂并且涉及的内容很多&#xff0c;在下面准备分3章节来分析&#xff0c;这是第一个章节&#xff0c;主要讲述sql解析和命令的分发部分。 代码版本&#xff…

开发高级 Web 部件

通过用户控件实现 Web 部件相当容易&#xff0c;但是也有一些弊端&#xff1a; 受限的重用&#xff1a;如果不手动复制 .ascx 文件到其他 Web 应用程序的目录下&#xff0c;就不能动态添加这些控件到其他 Web 应用程序的页面中。 受限的个性化&#xff1a;用户控件的个性化仅限…

强一致性和弱一致性的区别

一致性包括强一致性和弱一致性&#xff1a; 弱一致性&#xff1a;可以理解为CAP定律中的不一致现象。但是经过一定的时间会达到最终一致性 强一致性: 包含线性一致性和顺序一致性。 因此强一致性不一定是线性一致性&#xff0c;但线性一致性一定是强一致性

Juqery Html(),append()等方法的Bug

标题中说是jquery中的Bug&#xff0c;只是个人这么认为&#xff0c;先申明一下&#xff01; 这几天在做动态加载图片热区&#xff0c;我用Ajax获取到了area标签&#xff0c;这里有多个area,在IE8和FF里测试正常&#xff0c;可一到IE7,和IE6里面就显示不正常了。后来发现jquery中…

Cantor定理的一种好表述

今天我在A course on Borel sets 一书中看到了Cantor定理的一种好表述.我很喜欢这种表述.在很多书中&#xff0c;康托定理是这样表述的&#xff1a; 自然数集合的所有子集形成的集合是不可数集. 也有这样表述的: $2^{\mathbb{N}}$是不可数集. 不过在A course on Borel sets 中…

分页类与前台和后台的调用方法

using System;using System.Text; namespace WebDemo.Common{ public class LaomaPager { /// <summary> /// /// </summary> /// <param name"pageSize">一页多少条</param> /// <param name"currentPage">当前页</par…

MySQL中rename一个view对应的SQL语句

OS&#xff1a;linux ubuntu 最近在对MySQL数据库开发的过程中&#xff0c;需要修改一个view的名字&#xff0c;但是找了许久才找到对应的SQL&#xff0c;切记不是alter&#xff0c;而是rename table .... 在MySQL中&#xff0c;如果想要rename 视图的名字&#xff0c;需要使用…

SharePoint2007 配置MOSS基于AD的Forms验证

公司上边要求使用Forms验证方式登陆到MOSS系统 于是经过研究测试成功了, 这次上边又要求用户必须为AD用户 查了很多资料 经过了一番周折 终于测试成功了,无奈网上文章转载的太多, 差错太多,特将本人亲自测试的具体步骤贴出来 与大家一起进步 有什么不对的地方 还希望多提出宝贵…

ubuntu 12.04 nginx+ mono-fastcgi-server

mono是.NET在Linux下的的开源实现&#xff0c; 主要的运行方式分为两种apache mod_mononginx fastcgi (mono)考虑到nginx性能更好&#xff0c;这里讲述第二种实现方法因为Ubuntu 提供了完整的mono软件包支持&#xff0c;因此本文尝试在Ubuntu 12.04下搭建安装mono和fastcgi-s…