Инициализация члена структуры - PullRequest
2 голосов
/ 06 апреля 2011

Читая исходный код 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;
};

Обратите внимание на странное ":" после каждого объявления члена.Я собираюсь предположить, что это значение инициализации по умолчанию для переменной-члена.

Я попытался выполнить поиск в Google, чтобы подтвердить, но, не зная точно, как он называется, я не получил далеко (большинство результатов, где это сделатьс инициализацией по умолчанию).

Как называется этот метод?

Ответы [ 4 ]

4 голосов
/ 06 апреля 2011

Обратите внимание на странное ":" после каждого объявления члена.Я предполагаю, что это значение инициализации по умолчанию для переменной-члена.

Это не инициализация по умолчанию.Это означает, что breakConditionBefore является просто 2 битовым целым числом, isWhitespace является 1 битовым целым числом.И так далее.

В DWRITE_LINE_BREAKPOINT одно 8-разрядное целое число (т. Е. UINT8) делится между 5 членами, 3 из которых являются 2-разрядными целыми числами, а 2 члена являются 1-разрядными целыми числами.

Читать о Битовых полях

3 голосов
/ 06 апреля 2011

Нет, это не список инициализации по умолчанию, а битовое поле.Пожалуйста, обратитесь http://en.wikipedia.org/wiki/Bit_field.

2 голосов
/ 06 апреля 2011

:2 объявляет член из 2 битов.Это называется битовым полем.Поскольку общее число объявленных битов составляет до 8, все члены битового поля являются смежными, и их тип равен UINT8, struct DWRITE_LINE_BREAKPOINT имеет размер одного байта.

1 голос
/ 06 апреля 2011

Ну, это битовые поля.

У стандартных документов есть пример для вас.

С 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 могут быть.- конец примера]

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...