assert

assert 是运行期断言,它用来发现运行期间的错误,不能提前到编译期发现错误,
也不具有强制性,也谈不上改善编译信息的可读性,既然是运行期检查,对性能当然是
有影响的,所以经常在发行版本中,assert 都会被关掉。
assert 的关键在于判断 expression 的逻辑真假,如果为 false,就会在 stderr 上面打
印一条包含“表达式,文件名,行号”的错误信息,然后调用 abort 结束整个程序。

#include <iostream>
#include <assert.h>
using namespace std;
char * myStrcpy(char *dest, const char *src)
{
assert(dest); assert(src);
while(*dest++ = *src++);
} int main(int argc, char *argv[])
{
// char buf[1024]; char * p = NULL;
// myStrcpy(buf,p);
// cout<<buf<<endl;
FILE *fp = fopen("aa.c","r");
assert(fp);
return ;
}

static_assert
  static_assert 这个关键字,用来做编译期间的断言,因此叫做静态断言。其语法很简单:static_assert(常量表达式,提示字符串)。

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

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

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

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

#include <iostream>
using namespace std; static_assert(sizeof(void *) == , "64-bit code generation is not supported."); //该 static_assert 用来确保编译仅在 32 位的平台上进行, 不支持 64 位的平台, 该
语句可以放///在文件的开头处, 这样可以尽早检查, 以节省失败情况下的编译时间。 template<typename T, typename U>
int my_bit_copy(T& a, U& b)
{
static_assert(sizeof(a) == sizeof(b), "parameters must have same width");
} int main(int argc, char *argv[])
{
int a; float b;
my_bit_copy(a,b);
char c;
my_bit_copy(a,c);
return ;
}

C++11 assert/static_assert的更多相关文章

  1. Boost Replaceable by C++11 language features or libraries

    Replaceable by C++11 language features or libraries Foreach → Range-based for Functional/Forward → P ...

  2. node assert模块 Study.1

    1.assert() 大体理解意思:assert可以抽象理解为node中的alert++ assert模块是Node的内置模块,用于断言的作用,如果不是自己想要的就抛出错误 assert(arg1, ...

  3. JAVA笔记9__异常/throw关键字/自定义异常/受检与非受检异常、assert关键字/StringBuffer、StringBuilder/代码国际化、动态文本

    /** * 异常:在程序中导致程序中断运行的一些指令 * 1.受检异常:编译期 * 2.非受检异常:运行期 * 异常处理过程分析: * 1.一旦产生异常,系统会自动产生一个异常类的实例化对象 * 2. ...

  4. C++ Tips and Tricks

    整理了下在C++工程代码中遇到的技巧与建议. 0x00 巧用宏定义. 经常看见程序员用 enum 值,打印调试信息的时候又想打印数字对应的字符意思.见过有人写这样的代码 if(today == MON ...

  5. C++的一些编程规范

    新规范的目标: 让代码排错更加简单 程序员专心于业务逻辑 将一些错误交给编译器处理 提高代码可维护性 逐步实现插件化 编码 使用array(QT下用QVarLengthArray)代替和vector代 ...

  6. Ninject的使用

    摘要 DI容器的一个责任是管理他创建的对象的生命周期.他应该决定什么时候创建一个给定类型的对象,什么时候使用已经存在的对象.他还需要在对象不需要的时候处理对象.Ninject在不同的情况下管理对象的生 ...

  7. python关键字详解

    今天依旧在啃:<笨方法学python>,其中习题37是复习各种关键字.我本想百度一下记一下就ok了,但是百度出来第一个就Hongten的博客.我才意识到我也有博客,我应该学习他,把这些积累 ...

  8. groovy-正则表达式

    Groovy使用~”pattern” 来支持正则表达式,它将使用给定的模式字符串创建一个编译好的Java Pattern 对象.Groovy也支持 =~(创建一个Matcher)和 ==~ (返回bo ...

  9. groovy-集合

    Lists 你能使用下面的方法创建一个lists,注意[]是一个空list. 1 def list = [5, 6, 7, 8] 2 assert list.get(2) == 7 3 assert  ...

随机推荐

  1. iOS 打包Framework包含其他Framework的问题

    当你打包一个framework静态库包含另一个第三方静态库时,在工程中使用自己打包的framework,这时编译会出现报错,报错的大概原因是没有找到你打包framework里面的第三方framewor ...

  2. Grunt实战 --- 通过nodejs和Grunt实现项目在线构建

    本文主要说明,实现在线自动构建项目的实现方法.

  3. 《Linux 鸟哥私房菜》 第一部分 Linux文件、目录与磁盘格式

    1.Linux就是内核层与系统调用接口层这2层.

  4. CrystalReport runtime的下载地址

    SAP网站的东西实在太多了,找个CrytalReport都费劲.13.*版的可以通过下面的地址下载: SAP Crystal Reports, developer version for Micros ...

  5. Web框架和Django基础

    核心知识点 1.web应用类似于一个socket客户端,用来接收请求 2.HTTP:规定了客户端和服务器之间的通信格式. 3.一个HTTP包含两部分,header和body,body是可选,\r\n分 ...

  6. Java for LeetCode 119 Pascal's Triangle II

    Given an index k, return the kth row of the Pascal's triangle. For example, given k = 3, Return [1,3 ...

  7. Java for LeetCode 096 Unique Binary Search Trees

    Given n, how many structurally unique BST's (binary search trees) that store values 1...n? For examp ...

  8. oracle 数据库常用数据表操作

    在oracle中创建sequence CREATE SEQUENCE sequence名称 MINVALUE 1 MAXVALUE 9999999999999999999999999999 INCRE ...

  9. js正則函數 match、exec、test、search、replace、split 使用介紹集合

    match 方法 使用正則表達式模式對字元串執行查找,並將包含查找的結果作為數組返回. stringObj.match(rgExp) 參數 stringObj 必選項.對其進行查找的 String 對 ...

  10. [BZOJ4557][JLOI2016]侦查守卫

    4557: [JLoi2016]侦察守卫 Time Limit: 20 Sec  Memory Limit: 256 MBSubmit: 297  Solved: 200[Submit][Status ...