static_assert和assert有什么区别?
static_assert和assert都是断言,都可用于判断一个条件是否成立,并且在条件不成立时及时给出错误提示。那它们用什么不同和需要注意的地方呢?
- 1:static_assert在编译期执行,而assert在运行期执行。
- 2:static_assert无论在debug模式还是release模式都会正常执行,而assert只能在debug模式执行,release模式下会被忽视。
- 3:static_assert判断条件内只能写常量而不能写变量,assert则没有此限制。
static_assert的使用效果
从下图可以看出,static_assert里的条件不成立时IDE给出了错误标线,并且会在编译报错,同时在控制台输出我们填写的错误信息。

assert的使用效果
而assert则不同,从下图我们可以看出,在编译时尽管assert里的条件是不成立的,但依然正常编译通过,只有在运行时程序才会被中断。

