¿Cómo es el std :: vector assign constexpr de C ++ 20?

Sep 03 2020

Dado que el contenido actual y el tamaño de un vector se pueden determinar aleatoriamente en tiempo de ejecución, y todo el contenido tendrá que ser destruido al llamar a assign, ¿cómo puede la función de miembro de asignación de C ++ 20 ser constexpr ie. ¿tiempo de compilación?

Respuestas

3 metamorphosis Sep 03 2020 at 11:26

Encontré mi respuesta aquí . Citar,

Ser una función constexpr no significa que la función se ejecute en tiempo de compilación. Dice que la función tiene el potencial de ejecutarse en tiempo de compilación. Una función constexpr también puede ejecutar un tiempo de ejecución. A menudo es una cuestión del compilador y el nivel de optimización si una función constexpr se ejecuta en tiempo de compilación o en tiempo de ejecución.

Ergo, a diferencia de las variables constexpr, que deben ser determinables en tiempo de compilación, una llamada de una función constexpr dada puede ejecutarse en tiempo de compilación, dependiendo de las circunstancias de la llamada (por ejemplo, un constexpr std :: vector) y otra en tiempo de ejecución (por ejemplo, un std :: vector no constexpr).