这个流控制关键字类标识符的结构是什么?

What is this construct with flow-control-keyword-like identifiers?

本文关键字:结构 是什么 标识符 流控制 关键字      更新时间:2023-10-16

以下代码来自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++中是惯用的吗?它有名字吗?

这不是习惯用法。它是一种断言和返回值检查。有些人/文档将这样的需求称为返回值约束,其他人认为它们是函数后设条件的一部分——特别是从契约式设计的角度来看。

(它正在检查cmd是允许的值之一- F_SETFL也需要(long_arg & ~kAllowedMask) tp为0,否则确保它发出SIGSYS而不是继续返回不允许的值。)

(没有看谁发布了这个问题-我相信你知道上面所有的R,也许期望"约束"术语-在c++圈子中不广泛使用)