Heim  >  Artikel  >  Backend-Entwicklung  >  Warum können C-Klassen keine nicht ganzzahligen statischen Konstanten haben?

Warum können C-Klassen keine nicht ganzzahligen statischen Konstanten haben?

Mary-Kate Olsen
Mary-Kate OlsenOriginal
2024-10-23 14:45:04150Durchsuche

Why Can't C   Classes Have Non-Integral Static Constants?

Nicht-integrale statische Konstanten in C-Klassen: Warum nicht?

In C können statische const-Mitglieder einer Klasse nicht nicht-integral sein Typen. Dieses Verhalten mag rätselhaft erscheinen, wenn man bedenkt, dass die Sprache ganzzahlige Typen wie int und unsigned zulässt.

Der Grund

Der zugrunde liegende Grund für diese Einschränkung liegt in Optimierungsüberlegungen. Bei ganzzahligen Typen optimiert der Compiler häufig, indem er konstante Werte direkt in den umgebenden Code einfügt. Dadurch entfällt die Notwendigkeit einer Speicheradresse für diese Konstanten, was den Overhead von Variablen verringert.

Bei nicht ganzzahligen Typen wie double kann der Compiler jedoch ein solches Inlining nicht immer durchführen. Dies liegt daran, dass Operationen an nicht ganzzahligen Typen möglicherweise Gleitkommaberechnungen erfordern, die nicht einfach optimiert werden können. Daher muss der Compiler eine Speicheradresse für die Konstante erstellen und über eine Variable darauf zugreifen.

Beispiel

Betrachten Sie den folgenden Code:

<code class="cpp">class No_Good {
  static double const d = 1.0;
};</code>

Hier kann der Compiler die Konstante d nicht einbinden, da Double-Werte Gleitkommaoperationen erfordern. Daher muss eine Speicheradresse für d erstellt werden, was im C-Standard nicht zulässig ist.

Lösung

Um diese Einschränkung zu vermeiden, können Sie die Konstante als a deklarieren Funktion und nicht ein statisches Mitglied. Zum Beispiel:

<code class="cpp">class Now_Good {
  static double d() { return 1.0; }
};</code>

Dies ermöglicht es dem Compiler, den Wert von d nach Möglichkeit einzubinden und gleichzeitig die Semantik einer Konstante beizubehalten.

Das obige ist der detaillierte Inhalt vonWarum können C-Klassen keine nicht ganzzahligen statischen Konstanten haben?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn