c++ - 这个具有类似流程控制关键字的标识符的构造是什么?

标签 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++ 中的惯用语吗?有名字吗?

最佳答案

这不是惯用语。这是一种断言和返回值检查。有些人/文档将此类要求称为返回值约束,其他人则认为它们是函数后置条件的一部分 - 特别是来自按契约(Contract)设计的要求em> 观点。

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

(没有查看是谁发布了这个问题 - 我确定您知道上述所有 R 内容,也许还有“约束”术语 - 在 C++ 圈子中并未广泛使用)

关于c++ - 这个具有类似流程控制关键字的标识符的构造是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32597887/

相关文章:

c++ - 哪种方式更好地定义类型特征或行为?

C++ 11 委托(delegate)构造函数纯虚方法和函数调用——危险?

c++ - 多重继承中没有匹配函数

c++ - Visual C++ 关心函数参数中的数组大小。那是对的吗?

c++ - 代码::阻止链接错误

c++ - main.cpp :1:10: fatal error: opencv2/highgui. hpp:没有这样的文件或目录

c++ - 在非 constexpr 函数上添加的 constexpr 限定符不会触发任何警告

c++ - strftime %F 在 Windows 上不起作用

c++ - 在 C++ 中——是否可以将 volatile shared_ptr 与 nullptr 进行比较?

c++ - Linux SFML - 无法打开共享对象文件