C26445 NO_SPAN_REFC26445 NO_SPAN_REF

Une référence à gsl::span ou std::string_view peut indiquer un problème de durée de vie.A reference to gsl::span or std::string_view may be an indication of a lifetime issue. Les instructions C++ Core : GSL.view : vuesC++ Core Guidelines: GSL.view: Views

L’objectif de cette règle est pour identifier les problèmes de durée de vie subtiles qui peuvent se produire dans le code qui a été migré à partir des conteneurs standards pour la nouvelle étendue et les types d’affichage.The intention of this rule is to catch subtle lifetime issues that may occur in code which has been migrated from standard containers to new span and view types. Ces types peuvent être considérés comme « références aux mémoires tampons ».Such types can be considered as “references to buffers.” À l’aide d’une référence à une étendue ou une vue crée une couche supplémentaire d’indirection.Using a reference to a span or view creates an additional layer of indirection. Cette indirection est souvent inutile et peut prêter à confusion pour les chargés de maintenance.Such indirection is often unnecessary and can be confusing for maintainers. En outre, les étendues sont coûteuses à copier et peuvent être retournés par valeur à partir des appels de fonction.In addition, spans are cheap to copy and can be returned by value from function calls. Évidemment, ces résultats de l’appel ne doivent jamais être référencés.Obviously, such call results should never be referenced.

NotesRemarks

  • Cette règle détecte les références à gsl::span <>, gsl::basic_string_span <> et <> std::basic_string_view (y compris les alias pour les instanciations).The rule detects references to gsl::span<>, gsl::basic_string_span<>, and std::basic_string_view<> (including aliases to instantiations).
  • Actuellement avertissements sont émis uniquement sur les déclarations et instructions de retour.Currently warnings are emitted only on declarations and return statements. Cela peut être étendue dans les futures pour signaler également des paramètres de fonction.This may be extended in future to also flag function parameters.
  • L’implémentation de cette règle est très légère ne tente pas de durée de vie réelle de la trace.The implementation of this rule is very lightweight doesn’t attempt to trace actual lifetimes. À l’aide de références peut toujours être judicieuse dans certains scénarios.Using of references may still make sense in some scenarios. Dans ce cas, les faux positifs peuvent en toute sécurité être supprimées.In such cases, false positives can safely be suppressed.

Exemple : Référence temporaireExample: Reference to a temporary

// 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.