使用|在C ++中进行声明

时间:2015-01-22 01:28:56

标签: c++

我在使用C ++编写示例代码时遇到了以下声明。任何人都可以解释使用“|”在做声明时?

static const DWORD c_FaceFrameFeatures = FaceFrameFeatures::FaceFrameFeatures_BoundingBoxInColorSpace
| FaceFrameFeatures::FaceFrameFeatures_PointsInColorSpace
| FaceFrameFeatures::FaceFrameFeatures_RotationOrientation
| FaceFrameFeatures::FaceFrameFeatures_Happy;

请注意,DWORD是unsigned int的别名。 此片段取自Kinect V2的FaceBasicsD2D示例。

2 个答案:

答案 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,并注意每个标志如何以十六进制表示法定义为单个位。