在阅读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;
};注意每个成员声明后奇怪的“:”。我将假设它是成员变量的默认初始化值。
我试着在谷歌上搜索确认,但不知道它的确切名称,我没有得到太多(大多数结果在哪里做的默认初始化)。
这项技术叫什么名字?
发布于 2011-04-06 17:04:23
注意每个成员声明后奇怪的“:”。我将假设它是成员变量的默认初始化值。
这不是默认初始化。这意味着breakConditionBefore只是2位整数,isWhitespace是1位整数。诸若此类。
在DWRITE_LINE_BREAKPOINT中,一个8位整数(即UINT8)被划分为5个成员,其中3个是2位整数,2个成员是1位整数。
阅读有关Bit-fields的信息
发布于 2011-04-06 17:05:26
不是,它不是默认的初始化列表,而是位字段。请参考http://en.wikipedia.org/wiki/Bit_field。
发布于 2011-04-06 17:03:52
:2声明2位的成员。这称为位域。由于声明的位的总数加起来为8,所有位字段成员都是相邻的,并且它们的类型是UINT8,所以struct DWRITE_LINE_BREAKPOINT的大小是单字节。
https://stackoverflow.com/questions/5563861
复制相似问题