C++11新增静态断言

在C++11之前只有动态断言,也就是程序必须要运行,才能知道问题。这种方式就不大利于程序的编写调试。

C++11之前用的断言是——assert宏,大家可以转到这篇:assert宏运用

接下来要讲的是静态断言,也就是在编译期间就能判断出问题。

写个例子来说明为什么静态断言有时会比动态断言好。

动态断言例:assert

可以发现,一定要运行程序后调用Copy,才能真正的调用这个断言。如果在当下并没有调用Copy函数,哪么之后发布程序后别人再调用就可能会出问题。

C++11静态断言例:static_assert

使用了静态断言后,在编译时刻就能排错,错误代码也非常清楚:the parameters of copy must have same width. 很方便查找到问题。

static_assert使用注意点:

  • static_assert可以用于任何名字空间,可独立于任何函数调用之外运行,

  • static_assert断言表达式的结果必须要在编译时刻就能确定