Orden de ejecución en la lista de inicializadores en C++

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.

Publicación traducida automáticamente

Artículo escrito por _roronoa_ y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *