2014-09-16 3 views
1

Там существует C++ код, приведенный ниже:Может ли переменная C не указывать?

byte    _jfr_towrite  : 1,  // Flags 
        _caller_sensitive : 1, 
        _force_inline  : 1, 
        _hidden   : 1, 
        _dont_inline  : 1, 
             : 3; 

увидеть последнюю строку, то странно, что нет ничего, прежде чем «:» и после «» имя переменной не просто ничего.. Код от jdk8/openjdk/hotspot/src/share/vm/oops/method.hpp line 113. Я глубоко изучаю jdk, и мне нужна помощь, пожалуйста.

+0

И ваш вопрос ....? – CiaPan

ответ

2

<name> : <size>бит полей. Каждая из пяти названных переменных в вашем коде занимает один бит. Остальные три бита явно обозначены как неиспользуемые синтаксисом с отсутствующим именем,

Это не что-то, что можно сделать с любой переменной C++, но только с битовыми полями. Вы можете использовать синтаксис, который вы показываете, чтобы предоставить padding в битовых полях в пределах struct или class, не создавая неиспользуемого имени поля. Он не должен быть последним полем в struct или class: вы также можете создавать отступы в середине последовательности битовых полей. Фактическое размещение битовых полей, включая любое дополнение, определяется реализацией, поэтому не имеет значения, где вы размещаете его по отношению к другим битовым полям.

+1

Обратите внимание, что порядок и интервал битовых полей в любом случае определяются реализацией, поэтому заполнение может быть где угодно по отношению к другим полям. –

+0

@MattMcNabb Это справедливое наблюдение, спасибо! – dasblinkenlight

Смежные вопросы