c++ syntax static language-lawyer grammar

¿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 [..]