Y a-t-il une différence entre les définitions qui suivent ?
Si ce n’est pas le cas, quel style est préféré à C ++11 ?
Y a-t-il une différence entre les définitions qui suivent ?
Si ce n’est pas le cas, quel style est préféré à C ++11 ?
Je crois qu'il existe une différence. Nous allons renommer pour que nous puissions en parler plus facilement:
const double PI1 = 3.141592653589793;
constexpr double PI2 = 3.141592653589793;
Les deux PI1
et PI2
sont constants, ce qui signifie que vous ne pouvez pas les modifier. Cependant, seulement PI2
est une constante de compilation. Il doit être initialisé lors de la compilation. PI1
peut être initialisé au moment de la compilation ou de l'exécution. En outre, seulement PI2
peut être utilisé dans un contexte qui nécessite une constante de compilation. Par exemple:
constexpr double PI3 = PI1; // error
mais:
constexpr double PI3 = PI2; // ok
et:
static_assert(PI1 == 3.141592653589793, ""); // error
mais:
static_assert(PI2 == 3.141592653589793, ""); // ok
Que vous devez utiliser? Utilisez celui qui répond à vos besoins. Ne vous voulez vous assurer que vous avez un moment de la compilation constante qui peut être utilisé dans des contextes où une constante de compilation est nécessaire? Voulez-vous être en mesure de les initialiser avec un calcul fait au moment de l'exécution? Etc.
Pas de différence ici, mais il est important quand vous avez un type qui a un constructeur.
struct S {
constexpr S(int);
};
const S s0(0);
constexpr S s1(1);
s0
est une constante, mais il ne promet pas d'être initialisé au moment de la compilation. s1
est marquée constexpr
, donc c'est une constante, et, parce qu' S
s'constructeur est également marquée constexpr
, il sera initialisé au moment de la compilation.
Surtout, ce qui importe lors de l'initialisation au moment de l'exécution prendrait du temps et que vous voulez pousser ce travail sur le compilateur, où il est aussi beaucoup de temps, mais ne ralentit pas le temps d'exécution du programme compilé
Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.