以下代码为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 ++中的惯用语吗?它有名字吗?
答案 0 :(得分:2)
这不是惯用语。这是一种断言和返回值检查。有些人/文档将这些要求称为返回值约束,其他人认为它们是后置条件的功能的一部分 - 特别是来自按合同设计的那些 em> perspective。
(正在检查cmd
是否为允许值之一 - F_SETFL
还需要(long_arg & ~kAllowedMask)
tp为0
,否则会确保SIGSYS
代替where
继续返回不允许的值。)
(没有看过谁发布了这个问题 - 我相信你知道以上所有的R,期望也许“约束”一词 - 在C ++圈子中没有广泛使用)