Freigeben über


Warnung C26830

Potenziell leere optionale 'Variable' wird entwrappt.

Hinweise

Das Aufheben der Entwrastung leerer std::optional Werte ist nicht definiertes Verhalten. Ein solcher Vorgang gilt als Sicherheitsrisiko, da er zu einem Absturz, zum Lesen nicht initialisierter Arbeitsspeicher oder zu einem anderen unerwarteten Verhalten führen kann. Bei dieser Überprüfung wird versucht, Fälle zu finden, in denen eine std::optional Leerheit nicht überprüft wird, bevor Vorgänge entpackt werden. Sie können C26829 nur für eine eingeschränktere Analyse aktivieren.

Beispiel

std::optional<int> getOptional();

void f(std::optional<int> maybeEmpty)
{
    if (maybeEmpty)
        *maybeEmpty = 42; // No warning
    *maybeEmpty = 5; // warning: C26830
    std::optional<int> o = getOptional();
    *o = 42; // warning: C26830
}

Um dieses Problem zu lösen, stellen Sie sicher, dass der Code niemals ein leeres optionales Auslöser entpackt. Verwenden Sie alternativ die value Methode, und stellen Sie sicher, dass Sie die std::bad_optional_access Ausnahme behandeln.