Requisito previo: Clases , Constructores , Lista de inicializadores
En este artículo, discutiremos el orden de ejecución en la lista de inicializadores en C++ . Generalmente, el orden de ejecución es de arriba a abajo y de izquierda a derecha. Pero surge una rara condición en la que esta regla falla cuando la lista de inicializadores se usa en clase. En la lista de inicializadores, el orden de ejecución tiene lugar según el orden de declaración de las variables miembro. Al usar la lista de inicializadores para una clase en C++ , el orden de declaración de las variables miembro afecta la salida del programa.
Programa 1:
C++
// C++ program to illustrate the // order of initializer in list #include <iostream> using namespace std; class MyClass { private: // Declared first int b; // Declared Second int a; public: MyClass(int value) : b(value), a(b * 2) { cout << b << " " << a; } }; // Driver Code int main() { // Create an object MyClass obj(10); return 0; }
Producción:
10 20
Programa 2:
C++
// C++ program to illustrate the // order of initializer in list #include <iostream> using namespace std; class MyClass { private: // Declared first int a; // Declared Second int b; public: MyClass(int value) : b(value), a(b * 2) { cout << b << " " << a; } }; int main() { // Create an object MyClass obj(10); return 0; }
Producción:
10 65528
Ambas salidas son diferentes porque la ejecución se lleva a cabo según el orden de declaración:
- En el primer programa, b se declara primero, por lo que a b se le asigna el valor de 10 y luego se declara a, luego a se le asigna b *2. Entonces, la salida es 10 20.
- En el segundo programa, primero se declara a y luego b . Entonces, primero, a a se le asigna b * 2, pero b aún no está inicializado. Por lo tanto, se asigna un valor de basura a un archivo . Posteriormente a b se le asigna el valor de 10.