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里的条件是不成立的,但依然正常编译通过,只有在运行时程序才会被中断。