Frage

Ich habe mehrere Funktionen in einem Programm, das ich schreibe, die einen Wert verwenden, den ich mit einer sehr langsamen Funktion berechnen muss.Dieser Wert ändert sich jedes Mal, wenn das Programm erneut ausgeführt wird, daher kann ich nicht einfach einen statischen Wert speichern.Unten finden Sie ein Beispiel.

void this_gets_called_frequently()
{
    static int value = slow_function();

    //do stuff with the above value
}

Mein Hauptproblem liegt hier nicht darin, dass das Programm nicht funktioniert, sondern in der Sauberkeit.Ich möchte nicht wirklich eine globale Variable initialisieren und den Wert darin speichern, da er sich nach der Berechnung nicht ändern wird.Würde die Verwendung des Schlüsselworts static in der oben gezeigten Weise die obige Funktion nur einmal zur Berechnung aufrufen?Würde ein dort hinzugefügtes const-Schlüsselwort helfen?

Vielen Dank an alle, das wurde perfekt beantwortet!

War es hilfreich?

Lösung

Ja, eine Initialisierung von local static Variable wird höchstens einmal vorkommen (obwohl ich mich daran erinnere, dass einige Compiler-Versionen hier Probleme mit Multithreading haben könnten).const ist nicht erforderlich, in diesem Fall ist es vor allem eine Frage der Lesbarkeit und des Geschmacks.

Andere Tipps

Würde die Verwendung des Schlüsselworts static in der oben gezeigten Weise die obige Funktion nur einmal zur Berechnung aufrufen?

Ja, beim ersten Aufruf von this_gets_called_frequently

Würde ein dort hinzugefügtes const-Schlüsselwort helfen?

NEIN.Aber hinzufügen const für den Dokumentationswert.

Die Verwendung kann die Thread-lokalen Variablen von C ++ 11 verwenden, wenn sie in Ihrem Compiler verfügbar sind.Wenn Sie unter Windows sind, können Sie eine ähnliche GROSSECDICETICETAGCODE-API verwenden.Es ist da seit der Morgendämmerung von Win32.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top