【问题标题】:Is static_assert compiled into the binary filestatic_assert 是否编译成二进制文件
【发布时间】:2022-01-24 08:35:20
【问题描述】:

我想在我的 C++11 项目中使用 static_assert 来做一些编译时间检查。

据我了解,static_assert 不会在运行时执行,对吧?

如果是这样,当我通过执行关于编译的命令来编译我的项目时,例如gcc ...,编译器会将static_assert构建到二进制文件中,否则static_assert将被完全忽略,就像注释一样?

【问题讨论】:

    标签: c++ compilation static-assert


    【解决方案1】:

    static_assert是否编译成二进制文件

    没有。

    据我了解,static_assert 不会在运行时执行,对吧?

    没错。

    编译器会将 static_assert 构建到二进制文件中

    没有。

    static_assert 将被完全忽略,就像评论一样?

    不,这不是注释 - 检查表达式,如果表达式为假,则会显示一条消息。当表达式不是常量(无法在编译时计算)时,还会显示一条消息。

    【讨论】:

    • 我的错。让我说得更清楚。如果static_assert的表达式为真,则编译成功。在这种情况下,static_assert 就像注释一样,因为它会被编译器忽略。对吗?
    • In this case, static_assert is just like a comment because it will be ignored by the compiler. Right? 是的。
    • @Yves 不完全是。代码通常不会只编译一次。如果您在代码中做出明确的假设,那么static_assert( some_compile_time_constant != 0) 将在代码重构时触发,并且假设不再成立,而注释 // this is never 0 很容易被忽略
    【解决方案2】:

    与旧的assert() 不同,它是运行时测试,static_assert 由编译器测试,如果不满足会导致编译时错误。或者如果它不能被静态测试......

    那么,在运行时,就已经知道是真的,不需要再测试了。

    【讨论】:

      猜你喜欢
      • 2020-10-15
      • 1970-01-01
      • 2023-03-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-05-21
      • 2010-09-25
      • 1970-01-01
      相关资源
      最近更新 更多