具有类似流控制关键字的标识符的此构造是什么?

时间:2015-09-16 00:39:03

标签: c++

以下代码为from Chromium

  return Switch(cmd)
      .CASES((F_GETFL,
              F_GETFD,
              F_SETFD,
              F_SETLK,
              F_SETLKW,
              F_GETLK,
              F_DUPFD,
              F_DUPFD_CLOEXEC),
             Allow())
      .Case(F_SETFL,
            If((long_arg & ~kAllowedMask) == 0, Allow()).Else(CrashSIGSYS()))
      .Default(CrashSIGSYS());

据推测,某种类/模板构造已被用于生成看起来像流控制构造的东西,但是作为表达式而不是语句。这是现代C ++中的惯用语吗?它有名字吗?

1 个答案:

答案 0 :(得分:2)

这不是惯用语。这是一种断言和返回值检查。有些人/文档将这些要求称为返回值约束,其他人认为它们是后置条件的功能的一部分 - 特别是来自按合同设计的那些 em> perspective。

(正在检查cmd是否为允许值之一 - F_SETFL还需要(long_arg & ~kAllowedMask) tp为0,否则会确保SIGSYS代替where继续返回不允许的值。)

(没有看过谁发布了这个问题 - 我相信你知道以上所有的R,期望也许“约束”一词 - 在C ++圈子中没有广泛使用)