下面的代码是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++ 中的惯用语吗?有名字吗?
最佳答案
这不是惯用语。这是一种断言和返回值检查。有些人/文档将此类要求称为返回值约束,其他人则认为它们是函数后置条件的一部分 - 特别是来自按契约(Contract)设计的要求em> 观点。
(它正在检查 cmd
是否是允许的值之一 - F_SETFL
也需要 (long_arg & ~kAllowedMask)
tp 为 0
,否则确保它发出 SIGSYS
而不是继续返回不允许的值。)
(没有查看是谁发布了这个问题 - 我确定您知道上述所有 R 内容,也许还有“约束”术语 - 在 C++ 圈子中并未广泛使用)
关于c++ - 这个具有类似流程控制关键字的标识符的构造是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32597887/