返回介绍

静态(编译期)断言 — static_assert

发布于 2025-02-26 23:19:58 字数 1309 浏览 0 评论 0 收藏 0

静态(编译期)断言由一个常量表达式及一个字符串文本构成:

static_assert(expression, string);

expression 在编译期进行求值,当结果为 false(即:断言失败)时,将 string 作为错误消息输出。例如:

static_assert(sizeof(long) >= 8,
   “64-bit code generation required for this library.”);
struct S { X m1; Y m2; };
static_assert(sizeof(S)==sizeof(X)+sizeof(Y),
    ”unexpected padding in S”);

static_assert 在判断代码的编译环境方面(译注:比如判断当前编译环境是否 64 位)十分有用。但需要注意的是,由于 static_assert 在编译期进行求值,它不能对那些依赖于运行期计算的值的进行检验。例如:

int f(int* p, int n)
{
      //错误:表达式“p == 0”不是一个常量表达式
      static_assert(p == 0,
          “p is not null”);
}

(正确的做法是在运行期进行判断,假如条件不成立则抛出异常)

参考:

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文