wattpad variable vallenato una tag songs sobre resueltos responder que programacion preguntas para objetos objeto new metodos mediante llenar listas lista kpop instanciar iniciar inicializar inicializador inicializacion incomodas hacer funciones ejercicios ejemplos destruccion declarar crear cosas constructores con codigo clases clase amigos c++ c++11 initializer curly-braces

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?