Warnung C26445

Weisen Sie gsl::span keinen Verweis zu oder std::string_view weisen Sie diesen zu. Sie sind billig zu konstruieren und sind keine Besitzer der zugrunde liegenden Daten. (gsl.view)

Ein Verweis auf gsl::span oder std::string_view kann ein Hinweis auf ein Lebenszeitproblem sein.

C++ Core Guidelines

GSL.view: Ansichten

Diese Regel erfasst subtile Lebensdauerprobleme, die im Code auftreten können, der von Standardcontainern zu neuen Span- und Ansichtstypen migriert wird. Solche Typen können als "Verweise auf Puffer" betrachtet werden. Die Verwendung eines Verweises auf eine Spanne oder Ansicht erstellt eine zusätzliche Dereferenzierungsebene. Diese Dereferenzierung ist oft unnötig und kann für Standard Tainer verwirrend sein. Spans sind billig zu kopieren und können von Funktionsaufrufen zurückgegeben werden. Offensichtlich sollten solche Anrufergebnisse niemals referenziert werden.

Hinweise

  • Die Regel erkennt Verweise auf gsl::span<>, gsl::basic_string_span<> und std::basic_string_view<> (einschließlich Aliase zu Instanziierungen).
  • Derzeit werden Warnungen nur für Deklarationen und Rückgabeanweisungen ausgegeben. Diese Regel kann in Zukunft erweitert werden, um auch Funktionsparameter zu kennzeichnen.
  • Die Implementierung dieser Regel ist einfach und versucht nicht, die tatsächlichen Lebensdauern nachzuverfolgen. Die Verwendung von Verweisen kann in einigen Szenarien weiterhin sinnvoll sein. In solchen Fällen können falsch positive Ergebnisse sicher unterdrückt werden.

Codeanalysename: NO_SPAN_REF

Beispiel

Verweis auf eine temporäre:

// Old API - uses string reference to avoid data copy.
const std::string& get_working_directory() noexcept;

// New API - after migration to C++17 it uses string view.
std::string_view get_working_directory() noexcept;

// ...
// Client code which places an explicit reference in a declaration with auto specifier.
const auto &wd = get_working_directory(); // C26445 after API update.