我在使用C ++编写示例代码时遇到了以下声明。任何人都可以解释使用“|”在做声明时?
static const DWORD c_FaceFrameFeatures = FaceFrameFeatures::FaceFrameFeatures_BoundingBoxInColorSpace
| FaceFrameFeatures::FaceFrameFeatures_PointsInColorSpace
| FaceFrameFeatures::FaceFrameFeatures_RotationOrientation
| FaceFrameFeatures::FaceFrameFeatures_Happy;
请注意,DWORD是unsigned int的别名。 此片段取自Kinect V2的FaceBasicsD2D示例。
答案 0 :(得分:5)
你所拥有的是使用“按位OR”(|
字符)组合使用几个const“enum”值创建“位掩码”。
通常,当在紧凑的,稍微可扩展的表示中需要几个“标志”时,这是完成的。只有一点可扩展,因为DWORD是32位,因此最多可容纳32个标志。
鉴于标志通常具有除了一位之外的所有位为零的值,您也可以简单地添加它们,尽管这不是常规的:
static const DWORD c_FaceFrameFeatures = FaceFrameFeatures::FaceFrameFeatures_BoundingBoxInColorSpace
+ FaceFrameFeatures::FaceFrameFeatures_PointsInColorSpace
+ FaceFrameFeatures::FaceFrameFeatures_RotationOrientation
+ FaceFrameFeatures::FaceFrameFeatures_Happy;
答案 1 :(得分:3)
简而言之:按位OR运算符一次设置多个标志。
c_faceFrameFeatures
是一个unsigned int,该int的每个位都被单独用作标志。因此,一位将定义选项PointsInColorSpace
是真还是假,另一位将定义RotationOrientation
,依此类推。因此,此代码段的目的是在声明期间一次设置多个标志。
您可以查看文档' list of FaceFrameFeatures flags,并注意每个标志如何以十六进制表示法定义为单个位。