结构成员初始化
问题描述:
虽然通过我碰到下面的结构传来DirectWrite的源代码阅读:结构成员初始化
/// <summary>
/// Line breakpoint characteristics of a character.
/// </summary>
struct DWRITE_LINE_BREAKPOINT
{
/// <summary>
/// Breaking condition before the character.
/// </summary>
UINT8 breakConditionBefore : 2;
/// <summary>
/// Breaking condition after the character.
/// </summary>
UINT8 breakConditionAfter : 2;
/// <summary>
/// The character is some form of whitespace, which may be meaningful
/// for justification.
/// </summary>
UINT8 isWhitespace : 1;
/// <summary>
/// The character is a soft hyphen, often used to indicate hyphenation
/// points inside words.
/// </summary>
UINT8 isSoftHyphen : 1;
UINT8 padding : 2;
};
通知怪“:”每一个成员的声明之后。我将假设它是成员变量的默认初始化值。
我试着搜索谷歌来确认,但并不知道它的名字到底是什么,我没有得到太多的结果(大部分结果在默认初始化的情况下)。
这种技术的名称是什么?
答
注意每个 成员声明后的奇怪“:”。我打算 假定它是成员变量的默认初始值 值。
这不是默认初始化。这意味着breakConditionBefore
只是2
位整数,isWhitespace
是一个1
位整数。等等。
在DWRITE_LINE_BREAKPOINT
中,一个8位整数(即UINT8)被分成5个成员,其中3个是2位整数,2个成员是1位整数。
答
:2
声明2位的成员。这被称为位域。由于声明的总位数总和为8,因此所有位域成员都是相邻的,它们的类型是UINT8
,struct DWRITE_LINE_BREAKPOINT
是单字节大小。
答
那么,他们是位域。
标准文档本身就是一个例子。
从1.7.5的C++存储器模型,
[实施例:一个结构声明为
struct {
char a;
int b:5,
c:11,
:0,
d:8;
struct {int ee:8;} e;`
}
包含四个单独的存储器位置处:该字段a
和位域d
和e.ee
是每个单独的存储位置,并且可以被同时修改而不会相互干扰。位字段b
和c
一起构成第四存储单元的 。比特字段b
和c
不能同时修改,但例如b
和a
可以是。 -End example]
他们只是“奇怪”,因为你不知道他们是什么。 :) – 2011-04-06 09:39:44