Что определение языка C++ говорит о степени статического ключевого слова?
В C++, если у меня есть класс:
class Example {
static int s_One, s_Two;
...
};
Четко ли определяет язык, что s_Two
также является статичным?
Другими словами, используется ли экстент ключевого слова static
везде, куда идет int
, или он может быть похож на *
и применяется только к одной переменной?
Ответы
Ответ 1
Да, это относится ко всем именам в этом объявлении:
[dcl.stc]/1:
[..] В заданном decl-specier-seq должен появиться не более одного спецификатора класса хранилища [..] Спецификатор класса хранилища применяется к имени, объявленному каждым объявителем init в список [..]
Ответ 2
Согласно стандарту C++ 17 (10 деклараций)
2 Простое объявление или объявление-функции-узла в форме
attribute-specifier-seqopt decl-specifier-seqopt init-declarator-listopt ;
И (10.1 Спецификаторы):
1 Спецификаторы, которые можно использовать в объявлении:
decl-specifier:
storage-class-specifier
...
Так что в этом объявлении
static int s_One, s_Two;
decl-specifier-seq
содержит два decl-specifiers
, static
(спецификатор класса хранения) и int
. Таким образом, спецификатор класса хранения static
описывает обе переменные в init-declarator-list
s_One
и s_Two
.