Ich bin im Moment in mehr C++ 11 Zeug und sprang über constexpr
. In einem meiner Bücher ist es, dass Sie es für Konstanten wie π zum Beispiel auf diese Weise verwenden sollten:mit conexpr Doppel in Namespaces
#include <cmath>
// (...)
constexpr double PI = atan(1) * 4;
Nun wollte ich, dass in einem eigenen Namensraum setzen, zum Beispiel. MathC
:
// config.h
#include <cmath>
namespace MathC {
constexpr double PI = atan(1) * 4;
// further declarations here
}
... aber hier sagt IntelliSense function call must have a constant value in a constant expression
.
Wenn ich PI
die folgende Art und Weise zu erklären, es funktioniert:
static const double PI = atan(1) * 4;
Was der eigentliche Grund ist der Compiler scheint nicht constexpr
aber static const
hier zu mögen? Sollte hier nicht auch constexpr
wählbar sein, oder soll es hier nur um den Kontext gehen und constexpr
sollte nicht außerhalb von Funktionen deklariert werden?
Vielen Dank.
['atan'] (http://en.cppreference.com/w/cpp/numeric/math/atan) ist nicht" constexpr ". Siehe [diese Frage] (http://stackoverflow.com/questions/17347935/constexpr-math-functions). –
Welches Buch verwenden Sie und welche Seite/Abschnitt ist dieser Code in. – NathanOliver
So scheint es, dass dies ein Fehler des Buchautors dann ist. Es ist ein deutsches Buch mit dem Titel "C++ - Das umfassende Handbuch" von Jürgen Wolf, erschienen in Rheinwerk Computing, 2. Auflage 2014, Seite 250. Es heißt deutlich: consstexpr double PI_V3 = atan (1) * 4; – taiBsu