博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
C++11 assert/static_assert
阅读量:4356 次
发布时间:2019-06-07

本文共 1505 字,大约阅读时间需要 5 分钟。

 

assert

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

 

#include 
#include
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<
<

 

static_assert

  static_assert 这个关键字,用来做编译期间的断言,因此叫做静态断言。其语法很简单:static_assert(常量表达式,提示字符串)
  如果第一个参数常量表达式的值为真(true 或者非零值),那么 static_assert 不做任何事情,就像它不存在一样,否则会产生一条编译错误,错误位置就是该 static_assert语句所在行,错误提示就是第二个参数提示字符串。
  使用 static_assert,我们可以在编译期间发现更多的错误,用编译器来强制保证一 些契约,并帮助我们改善编译信息的可读性,尤其是用于模板的时候。
  static_assert 可以用在全局作用域中,命名空间中,类作用域中,函数作用域中,几乎可以不受限制的使用。
  编译器在遇到一个 static_assert 语句时,通常立刻将其第一个参数作为常量表达式进行演算,但如果该常量表达式依赖于某些模板参数,则延迟到模板实例化时再进行演算,这就让检查模板参数成为了可能。 

#include 
using namespace std;static_assert(sizeof(void *) == 4, "64-bit code generation is not supported.");//该 static_assert 用来确保编译仅在 32 位的平台上进行, 不支持 64 位的平台, 该语句可以放///在文件的开头处, 这样可以尽早检查, 以节省失败情况下的编译时间。template
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 0;}

 

 

转载于:https://www.cnblogs.com/wangkeqin/p/9297193.html

你可能感兴趣的文章
Beta 冲刺(1/7)
查看>>
修改 Vultr 登录密码
查看>>
CSS学习
查看>>
Centos 安装lnmp完整版
查看>>
设计模式之策略模式
查看>>
【转】Eclipse和PyDev搭建完美Python开发环境(Ubuntu篇)
查看>>
redis安装和配置
查看>>
2016424王启元 Exp5 msf基础应用
查看>>
android + eclipse + 后台静默安装(一看就会)
查看>>
JPA事务总结
查看>>
transitionFromView方法的使用
查看>>
ubuntu nginx+php环境520错误
查看>>
Java中OutOfMemoryError(内存溢出)的三种情况及解决办法
查看>>
windows 10 无法使用内置管理员账户打开应用的解决方案
查看>>
php入门变量
查看>>
wince(2.3)获取位图某一点的RGB值
查看>>
【转】C#中如何实现左截取和右截取字符串
查看>>
SQL Server 中关于EXCEPT和INTERSECT的使用方法
查看>>
csdn肿么了,这两天写的博文都是待审核
查看>>
windows下cocos2dx3.0开发环境及Android编译环境搭建
查看>>