¿Qué dice la definición del lenguaje C++ sobre el alcance de la palabra clave estática?
syntax static (2)
En C ++, si tengo una clase:
class Example {
static int s_One, s_Two;
...
};
¿El lenguaje define claramente que
s_Two
también es estático?
En otras palabras, ¿la extensión de la palabra clave
static
va a todas partes donde va el
int
, o puede ser como
*
y solo se aplica a una variable?
De acuerdo con el estándar C ++ 17 (10 declaraciones)
2 Una declaración simple o declaración de función nodeclspec del formulario
attribute-specifier-seqopt decl-specifier-seqopt init-declarator-listopt ;
Y (10.1 Especificadores):
1 Los especificadores que se pueden usar en una declaración son
decl-specifier:
storage-class-specifier
...
Entonces en esta declaración
static int s_One, s_Two;
decl-specifier-seq
contiene dos
decl-specifiers
,
static
(especificador de clase de almacenamiento) e
int
.
Por lo tanto, el especificador de clase de almacenamiento
static
describe las dos variables en la
init-declarator-list
s_One
s_Two
s_One
y
s_Two
.
Sí, se aplica a cada nombre en esa declaración:
[dcl.stc]/1:
[..] Como máximo, un especificador de clase de almacenamiento debe aparecer en un determinado dec-specifier-seq [..] El especificador de clase de almacenamiento se aplica al nombre declarado por cada declarador de inicio en la lista [..]