c++ - variable - tags para responder
¿Por qué los inicializadores en clase solo usan=o{}? (1)
No soy 100% positivo sobre esto, pero esto podría ser para evitar una ambigüedad de sintaxis. Por ejemplo, considere la siguiente clase:
class BadTimes {
struct Overloaded;
int Overloaded; // Legal, but a very strange idea.
int confusing(Overloaded); // <-- This line
};
¿Qué significa la línea indicada? Tal como está escrito, esta es una declaración de una función miembro denominada confusing
que acepta como parámetro un objeto de tipo Overloaded
(cuyo nombre no se especifica en la declaración de la función) y devuelve un int
. Si C ++ 11 permitiera que los inicializadores usaran paréntesis, esto sería ambiguo, porque también podría ser una definición de un miembro de tipo int
llamado confusing
que se inicializa con el valor del miembro de datos Overloaded
. (Esto está relacionado con el problema actual con el análisis más molesto ).
Al requerir llaves, se elimina esta ambigüedad:
class BadTimes {
struct Overloaded;
int Overloaded; // Legal, but a very strange idea.
int confusing{Overloaded}; // <-- This line
};
Ahora, está claro que confusing
es en realidad un int
inicializado al valor de Overloaded
, porque no hay manera de leerlo como una declaración de función.
¡Espero que esto ayude!
Los inicializadores en clase (característica C ++ 11) deben estar encerrados entre llaves o seguir un signo =. No pueden especificarse entre paréntesis.
¿Cuál es la razón para esto?