static_assert
static_assert靜态斷言,是C++關鍵字,作用是讓編譯器在編譯期對常量表達時進行斷言。如果通過,就不報錯;如果不通過,就報錯。
用法:
```c++
static_assert(常量表達式, 錯誤提示資訊);
常量表達式的值為true或者false,或者可以轉化為true/false。
如果斷言不通過,程式編譯也不會通過。
### assert
assert動态斷言,從C繼承過來的宏定義,頭檔案assert.h。
從下面源碼可以看到,assert是把表達式通過static_cast<bool>轉換成bool類型,進而實作斷言。
```C++
// # if defined __cplusplus
# define assert(expr) \
(static_cast <bool> (expr) \
? void (0) \
: __assert_fail (#expr, __FILE__, __LINE__, __ASSERT_FUNCTION))
assert不管斷言是否通過,都不會影響編譯。
static_cast與assert主要差別
**2. 是否影響程式運作效率**
static_assert: 所包含的代碼不會生成目标代碼,不會影響程式性能;
assert: 會影響程式性能,常用于調試階段,正式釋放軟體時通常關閉assert功能;
參考[c++靜态斷言(static_assert)](https://zhuanlan.zhihu.com/p/79743589)