Je suis actuellement entrer dans plus de choses C++ 11 et a sauté environ constexpr
. Dans un de mes livres, il est dit que vous devez utiliser pour des constantes comme π par exemple ainsi:en utilisant constexpr double dans les espaces de noms
#include <cmath>
// (...)
constexpr double PI = atan(1) * 4;
Maintenant, je voulais le mettre dans un propre espace de noms, par exemple. MathC
:
// config.h
#include <cmath>
namespace MathC {
constexpr double PI = atan(1) * 4;
// further declarations here
}
... mais ici dit IntelliSense function call must have a constant value in a constant expression
.
Quand je déclare PI
la façon suivante, il fonctionne:
static const double PI = atan(1) * 4;
Quelle est la raison réelle du compilateur ne semble pas aimer constexpr
mais static const
ici? Est-ce que constexpr
ne devrait pas non plus être éligible ici, ou est-ce que c'est tout sur le contexte ici et constexpr
ne devrait pas être déclaré en dehors des fonctions?
Merci.
['atan'] (http://fr.cppreference.com/w/cpp/numeric/math/atan) n'est pas' constexpr'. Voir [cette question] (http://stackoverflow.com/questions/17347935/constexpr-math-functions). –
Quel livre utilisez-vous et à quelle page/section correspond ce code? – NathanOliver
Donc, il semble que ce soit une erreur de l'auteur du livre alors. C'est un livre allemand intitulé "C++ - Das umfassende Handbuch" de Jürgen Wolf, publié dans Rheinwerk Computing, 2ème édition en 2014, page 250. Il indique clairement "constexpr double PI_V3 = atan (1) * 4;". – taiBsu