es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿Por qué las variables globales no se conocen en tiempo de compilación?

En C++, sé que si declaro una variable dentro de una función, esta variable se considera en realidad como una variable local auto (destruida una vez que la función hace return). Por lo tanto, tiene sentido que una variable local no pueda aparecer en una expresión constante como un inicializador para una variable constexpr, ya que simplemente se conoce en tiempo de ejecución, necesita que la función en la que se declaró se ejecute y eso solo sucede en tiempo de ejecución.

int x { 10 };
constexpr int y { x }; //error: x debe ser constante

int main()
{
    //..
}

Mi pregunta es, ¿qué sucedería si esta variable fuera global? Entonces no se necesitarían ejecutar funciones en tiempo de ejecución para conocer el valor de x, porque no pertenece a ninguna función. Mi pregunta, en otras palabras, es cuándo exactamente el compilador conoce el valor de esta variable x.

Ya sé que, si la variable x es constante, entonces x será una expresión constante, pero ¿por qué es eso?

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Si la variable x se declara como una variable global y se marca como const, entonces el compilador conoce su valor en tiempo de compilación. Esto significa que se puede utilizar como inicializador para una variable constexpr.

    Por ejemplo, el siguiente código se compilará correctamente:

    const int x { 10 };
    constexpr int y { x };
    
    int main()
    {
        //..
    }
    

    Esto se debe a que x es una variable global const y su valor se conoce en tiempo de compilación. Por lo tanto, se puede utilizar como inicializador para y, que se declara como constexpr. El valor de y también se conoce en tiempo de compilación y se puede utilizar como una expresión constante.

    Por otro lado, si x se declara como una variable global no constante, su valor no se conoce en tiempo de compilación. En este caso, no se puede utilizar como inicializador para una variable constexpr, porque se requiere ejecución en tiempo de ejecución para determinar su valor. Por ejemplo:

    int x { 10 };
    constexpr int y { x }; //error: x debe ser const
    
    int main()
    {
        //..
    }
    

    En resumen, una variable global const se puede utilizar como una expresión constante en C++, porque su valor se conoce en tiempo de compilación. Una variable global no constante no se puede utilizar como una expresión constante, porque su valor no se conoce hasta tiempo de ejecución.

Comments are closed.