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::cout<<"read max."<break;
default:
std::cout<<"read"<break;
}

// read_at_runtime – wie vorher
const int MAX=read_at_runtime();
switch(i)
{
case MAX:
std::cout<<"read max."<default:
std::cout<<"read"<}
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.

Themenseiten: Anwendungsentwicklung, Software

Fanden Sie diesen Artikel nützlich?
Content Loading ...
Whitepaper

Artikel empfehlen:

Neueste Kommentare 

Noch keine Kommentare zu Umwandlung von Kompilierzeit-Konstanten zu Laufzeit-Konstanten und umgekehrt

Kommentar hinzufügen

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind markiert *