Heim >Backend-Entwicklung >C++ >Warum kann ich Gleitkommazahlen nicht als C-Vorlagenparameter verwenden?
Warum Gleitkommawerte nicht als Vorlagenparameter zulässig sind
In C wird versucht, einen Gleitkommawert als Vorlagenparameter zu verwenden, wie in Der folgende Code führt zu folgendem Fehler:
GenericClass<float, 4.6f> gcFloat; error: `float' is not a valid type for a template constant parameter
Standard Verbot
Gemäß dem C 11-Standard müssen Nicht-Typ-Template-Argumente eines der folgenden sein:
Gleitkommawerte passen jedoch in keine dieser Kategorien .
Begründung
Die primäre Grund für diese Einschränkung ist die Ungenauigkeit von Gleitkommaberechnungen. Gleitkommaberechnungen können nicht exakt dargestellt werden, was bei der Verwendung als Vorlagenargumente zu unerwartetem Verhalten führen kann. Beispielsweise verhält sich der folgende Code aufgrund möglicher Rundungsunterschiede möglicherweise nicht wie beabsichtigt:
func<1/3.f>(); func<2/6.f>();
Alternative Lösungen
Berücksichtigen Sie die Darstellung von Gleitkommawerten als Vorlagenargumente Verwenden erweiterter Konstantenausdrücke (constexpr) in C 11, um den Zähler und Nenner des Gleitkommawerts zur Kompilierungszeit zu berechnen. Diese können dann als separate Ganzzahlargumente übergeben werden. Es ist jedoch wichtig, einen Schwellenwert zu definieren, um sicherzustellen, dass nahe beieinander liegende Gleitkommawerte das gleiche Zähler/Nenner-Verhältnis ergeben.
Das obige ist der detaillierte Inhalt vonWarum kann ich Gleitkommazahlen nicht als C-Vorlagenparameter verwenden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!