C++11的静态断言

断言就是将一个返回值总是需要为真的判别式放在语句中,来排除在设计的逻辑上不应该出现的情况。C++11标准中引入了静态断言:static_assert

在C++标准中,<cassert>assert.h为我们提供了assert宏,但是这个宏只有在运行时才进行断言,这有很多的限制,因为有时候,程序的某些路径我们可能执行不到,所以最好能够在编译的时候就产生断言。

C++11标准中就引入了静态断言来解决这个问题。

静态断言static_assert使用起来非常简单,它接受两个参数
1、断言表达式,就是一个需要为正的表达式。
2、警告信息,用来在产生断言的时候提示信息。
such as:

#include<cstring>
using namespace std;template <typename T,typename U> int bit_copy(T &a,U &b){static_assert(sizeof(a)==sizeof(b),"参数的长度不一样,可能出现越界!");memcpy(&a,&b,sizeof(b));
}
int main(){int a;long b=0x1234567;bit_copy(a,b);
}

在这里插入图片描述

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

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

相关文章

C++ 字符串编程训练2

今天讲的一道习题是很经典的约瑟夫环问题&#xff0c;其实lz对于链表的某些操作还不是太懂&#xff0c;所以在程序中有些地方还不太看得懂&#xff0c;这里借鉴的网上的做法&#xff0c;还请大牛能够解答我的疑惑&#xff0c;谢谢&#xff01; 标题&#xff1a;约瑟夫环 说明&a…

linux扩展lvm磁盘

env&#xff1a; centos 6.5 x64 hyper-v虚拟机 这个方法可以在当前运行的系统中扩展root磁盘 详细步骤 之前想创建的一个虚拟机的磁盘空间不够用了&#xff0c;所以想扩容一下磁盘。 正好使用的时候是lvm磁盘&#xff0c;可以支持扩容。 格式化一个新的分区或者磁盘 Command…

C/C++编译、测试须知、须会,CMake、Boost等

以下内容为本人实习期间学习笔记&#xff01;&#xff01;参考了网上的许多教程&#xff0c;共享大家&#xff0c;欢迎交流。 动态库和静态库&#xff08;共享库&#xff09; 不同点&#xff1a;代码被载入的时刻不同 静态库的代码在编译过程中已经被载入可执行程序&#xf…

C# DataTable去除重复,极其简便、简单

其中sourceDT是获取到的一个DataTable类型的集合对象 去重复使用方式&#xff1a; 实例化一个DataView对象 假设为dv&#xff0c;直接dv.ToTable()即可&#xff0c;ToTable中可为&#xff08;true,"用于判断重复的列"&#xff09;&#xff0c;比如图中所示&#xff0…

【转】C++类中对同类对象private成员访问

私有成员变量的概念&#xff0c;在脑海中的现象是&#xff0c;以private关键字声明&#xff0c;是类的实现部分&#xff0c;不对外公开&#xff0c;不能在对象外部访问对象的私有成员变量&#xff0e; 然而&#xff0c;在实现拷贝构造函数和赋值符函数时&#xff0c;在函数里利…

MySQL 导出命令

mysqldump --no-defaults -u root -p dbname > c:\www\test.sql windows 下使用。转载于:https://www.cnblogs.com/chenshuo/p/4646070.html

ubuntu16.04编译boost for Android(boost 1.65)

下载boost源码 在官网下载指定版本的源码 http://www.boost.org/users/history/ 编译boost源码 1.进入源码目录执行./bootstrap.sh生成编译工具 2.编辑project-config.jam文件,替换如下内容 # define platform name of ndk import os ; if [ os.name ] CYGWIN || [ os.na…

Jquery获取select,dropdownlist,checkbox下拉列表框的值

jQuery获取 Select选择的Text和Value:语法解释&#xff1a;1. $("#select_id").change(function(){//code...}); //为Select添加事件&#xff0c;当选择其中一项 时触发2. var checkText$("#select_id").find("option:selected").text(); //获…

maven2 + tomcat6 + eclipse集成配置

转载&#xff1a;http://wenku.baidu.com/view/d64147c676eeaeaad1f330d4.html?review /*maven2 tomcat6 eclipse集成配置maven的配置环境变量M2_HOME maven主目录环境变量path maven主目录/binapache-maven/conf/setting.xml文件1、新建maven本地仓库文件夹apache-maven2…

定位pure virtual method called问题

我是在进行boost test的时候遇到了这样的一个问题&#xff0c;最后问题定位到测试用例中&#xff0c;测试的工程以及单元测试的代码是之前的&#xff0c;没有开发完&#xff0c;我实习的时候leader让我完善一下测试框架&#xff0c;添加一下测试代码。 目标机是Android&#x…

环形矩阵

1.逆时针 代码&#xff1a; 1 // huanxingjz.cpp : Defines the entry point for the console application.2 //3 4 #include "stdafx.h"5 #include <stdio.h>6 #include <iostream>7 #include "windows.h"8 #define MAX 409 using namespace …

检查MySQL主从数据一致性

未公布转载于:https://www.cnblogs.com/cuizhipeng/p/4646489.html

统计文件里有多少个字符(only a simple cpp)

通过重定向读取文件内容&#xff0c;并检测其中有多少字符&#xff0c;包括空格&#xff0c;但tap键可能统计结果不同。 #include<iostream>int main(int argc,char *argv[]){using std::cin,std::cout,std::endl;cout<<"Usage:"<<argv[0]<<…

Winsock网络编程笔记(4)----基本的理论知识

前面的笔记记录了Winsock的入门编程&#xff0c;领略了Winsock编程的乐趣。。但这并不能算是掌握了Winsock&#xff0c;加深理论知识的理解才会让后续学习更加得心应手。。因此&#xff0c;这篇笔记将记录一些有关Winsock的基本理论知识&#xff0c;由于是一篇笔记&#xff0c;…

30分钟学会使用grunt打包前端代码

http://www.cnblogs.com/yexiaochai/p/3603389.html转载于:https://www.cnblogs.com/wuxiang/p/4647280.html

简单shell:删除五日之前的日志文件

曾经在某公司面试的时候被问到了类似的问题。 假设在logs文件夹存放了许多日志文件 比如&#xff1a;20190204.log、20190205.log、20190206.log。。。 我们要删除特定日期之前的日志 在这里展示的是使用shell指令中的find指令完成操作 首先看一下find指令的命令格式&#xf…

Method Swizzle黑魔法,修改 ios 系统类库方法(转载)

一般来说&#xff0c;系统提供的方法已经足够开发了&#xff0c;但是有的时候有些需求用普通方法不好做。 如&#xff1a;在所有的viewcontroll 的viewwillappear&#xff1a;方法之前打个log 你可能会这么做&#xff1a; 1. 建一个uiviewcontroll 父类&#xff0c;重写viewwil…

win10无法开启夜间模式

在学校的时候没感觉&#xff0c;一进公司发现电脑还是需要设置一下护眼的&#xff0c;但是在设置的时候却遇到夜间模式无法开启的问题。 首先在左下角搜索设备管理器 找到显示适配器 查看显示器设备状态 如果设备图标上有黄三角感叹号则说明该设备驱动有问题&#xff0c;需要…

Linux LVM学习总结——扩展卷组VG

Linux服务器由于应用变更或需求的缘故&#xff0c;有可能出现分区空间不足的情况&#xff0c;此时往往需要进行扩容&#xff08;要增加分区的空间&#xff09;&#xff0c;而采用LVM的好处就是可以在不需停机的情况下可以方便地调整各个分区大小。如下所示&#xff0c;分区/u05…