2017-10-30 8 views
0

Ich benutze C++ 11. Ich habe eine Gleitkommazahl.C++: Kompilierzeit den Wert einer Gleitkommazahl bestätigen

float some_float = 3.0; 

Jetzt möchte ich Zeit Prüfung kompilieren, dass diese Zahl größer als ein Wert ist. Angenommen, ich möchte die Zeit kompilieren, um zu bestätigen, dass some_float größer als 1.0 ist. Ich versuche dies:

static_assert(some_float > 1.0); 

Aber es Fehler aus beschweren,

error: static_assert expression is not an integral constant expression 
static_assert(some_float > 1.0); 
       ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 

Frage:
, was falsch ist, dass ich tue?
Wie kann ich zur Kompilierungszeit bestätigen, dass some_float auf etwas über 1.0 gesetzt ist?

+1

'static_assert' nur auf der Kompilierung funktioniert, kann es nicht den Wert von' some_float überprüfen ', weil sie nicht wirklich existieren an diesem Punkt. – DimChtz

Antwort

2

some_float müssen constexpr

constexpr float some_float = 3.0; 

Wenn Sie some_float einfach als float definieren, können in einem assert() verwendet werden, das funktioniert Laufzeit; nicht in einer static_assert(), das ist kompilierte Zeit überprüft.

Außerdem: in C++ 11 ist es eine Zeichenfolge für eine Fehlermeldung erforderlich

static_assert (some_float > 1.0f , "!"); 
//..................................^^^ error message 
Verwandte Themen