Umwandlung von Kompilierzeit-Konstanten zu Laufzeit-Konstanten und umgekehrt

Es gibt einige Situationen, in denen Laufzeit-Konstanten einfach nicht genügen und Kompilierzeit-Konstanten erforderlich sind. Man kann sich jede Menge Ärger ersparen, wenn man sich dieser Situationen bewusst ist. Selbst wenn eine Variable als Konstante bezeichnet wird: Wird sie nur zur Laufzeit initialisiert, kann sie nicht eingesetzt werden für

  • Arraygrenzen
  • Case-Ausdrücke
  • Länge von Bitfeldern
  • Zähler-Initialisierung
  • ganzzahlige oder aufzählende non-type-Template-Argumente

In Tabelle A wird jeweils ein Beispiel gezeigt.

Tabelle A
Kompilierzeit Laufzeit (generiert Fehler bei Kompilierung)
Arraygrenzen const int MAX=5;
int a[MAX];
#include
// liest eine Ganzzahl zur Laufzeit ein
int read_at_runtime()
{int n=0; std::cin>>n; return n;}

const int MAX=read_at_runtime();
int a[MAX];
int main() {}

Case-Ausdrücke const int MAX=5

int i=read_at_runtime();
switch(i)
{
case MAX:
std::coutbreak;
default:
std::coutbreak;
}

// read_at_runtime – wie vorher
const int MAX=read_at_runtime();
switch(i)
{
case MAX:
std::coutdefault:
std::cout}
Länge von Bitfeldern const int MAX=5;
struct example {
const int bitlength:MAX;
};
// read_at_runtime – wie vorher
const int MAX=read_at_runtime();
struct example {
const int bitlength:MAX;
};
Zähler-Initialisierung const int MAX=0;
typedef enum DoTimes {
None=MAX
Once=1,
Multiple=2,
};
// read_at_runtime – wie vorher
const int MAX=read_at_runtime();

typedef enum DoTimes {
None=MAX,
Once=1,
Multiple=2,
};

Ganzzahlige oder aufzählende non-type-Template-Argumente const int MAX=5;

template class test {};

int main()
{testval;}

// read_at_runtime – wie vorher
const int MAX=read_at_runtime();

template class test {};

int main()
{testval;}

Zu beachten ist außerdem, dass manche Optimierungen nicht ausgeführt werden, wenn eine Kompilierzeit-Konstante in eine Laufzeit-Konstante umgewandelt wird, wie Listing B zeigt.

Page: 1 2 3 4 5

ZDNet.de Redaktion

Recent Posts

Lags beim Online-Gaming? DSL-Vergleich und andere Tipps schaffen Abhilfe

Beim Online-Gaming kommt es nicht nur auf das eigene Können an. Auch die technischen Voraussetzungen…

2 Tagen ago

GenKI-Fortbildung immer noch Mangelware

Fast jedes zweite Unternehmen bietet keinerlei Schulungen an. In den übrigen Betrieben profitieren oft nur…

2 Tagen ago

Netzwerk-Portfolio für das KI-Zeitalter

Huawei stellt auf der Connect Europe 2024 in Paris mit Xinghe Intelligent Network eine erweiterte…

2 Tagen ago

Internet-Tempo in Deutschland: Viel Luft nach oben

Höchste Zeit für eine schnelle Kupfer-Glas-Migration. Bis 2030 soll in Deutschland Glasfaser flächendeckend ausgerollt sein.

3 Tagen ago

Erste Entwickler-Preview von Android 16 verfügbar

Schon im April 2025 soll Android 16 den Status Plattformstabilität erreichen. Entwicklern gibt Google danach…

3 Tagen ago

Kaspersky warnt vor Cyberangriff auf PyPI-Lieferkette

Die Hintermänner setzen KI-Chatbot-Tools als Köder ein. Opfer fangen sich den Infostealer JarkaStealer ein.

3 Tagen ago