Ich lese Bjarne Stroustrup's Buch, "Die C++ Programmiersprache" und ich fand ein Beispiel, das static_assert
erklärt. Was ich verstanden habe ist, dass static_assert
nur mit Dingen funktioniert, die durch konstante Ausdrücke ausgedrückt werden können. Mit anderen Worten, es darf keinen Ausdruck enthalten, der zur Laufzeit ausgewertet werden soll.static_assert schlägt fehl, wenn die Testbedingung Konstanten enthält, die mit const definiert sind?
Das folgende Beispiel wurde in dem Buch (ich habe einige Änderungen im Code. Aber ich glaube nicht, dass irgendetwas in dem Buch. Gegeben durch den ursprünglichen Beispielcode erzeugt werden würde ändern, sollte die)
verwendet#include <iostream>
using namespace std;
void f (double speed)
{
constexpr double C = 299792.468;
const double local_max = 160.0/(60*60);
static_assert(local_max<C,"can't go that fast");
}
int main()
{
f(3.25);
cout << "Reached here!";
return 0;
}
Das oben genannte gibt einen Kompilierungsfehler. Hier ist es mit ideone zusammengestellt: http://ideone.com/C97oF5
den genauen Code aus dem Buch Beispiel:
constexpr double C = 299792.458;
void f(double speed)
{
const double local_max = 160.0/(60∗60);
static_assert(speed<C,"can't go that fast"); // yes this is error
static_assert(local_max<C,"can't go that fast");
}
Ich kann mich nicht daran erinnern, irgendeine Zeile in den obigen zwei Codefragmenten entfernt oder hinzugefügt zu haben. Sie können den Bearbeitungsverlauf überprüfen (wenn das möglich ist). –
Ich entschuldige mich. Ich sehe diese Codezeile immer noch in Ihrem Post. –
Die Zeile existiert noch und kommentiert mit // Ja, das ist ein Fehler. Bitte beachten Sie, dass in der Frage zwei verschiedene Code-Snippets enthalten sind. Lesen Sie die Frage sorgfältig und Sie werden es verstehen. –