constexpr vs const vs constexpr const
const-vs-constexpr-on-variables
Lo que dice el chico sobre constexpr es correctoif double
se usa (ofloat
por supuesto). Sin embargo, si cambia el tipo var dedouble
a un tipo entero como int, char, etc., todo funciona. ¿Por qué sucede eso?
int main()
{
const int PI1 = 3;
constexpr int PI2 = 3;
constexpr int PI3 = PI1; // works
static_assert(PI1 == 3, ""); // works
const double PI1__ = 3.0;
constexpr double PI2__ = 3.0;
constexpr double PI3__ = PI1__; // error
static_assert(PI1__ == 3.0, ""); // error
return 0;
}
Update
: la siguiente línea fue un error, quise decirPI3__ = PI1__
constexpr double PI3__ = PI1; // I meant PI1__
Preguntas:
Por quéconst int = 3
es tiempo de compilación constante peroconst double = 3.0
¿no es?
¿Hay alguna razón por la que debería usarconstexpr const int val;
terminadoconstexpr int val
? Ambos parecen hacer exactamente lo mismo.