Jegyzet
Az oldalhoz való hozzáférés engedélyezést igényel. Próbálhatod be jelentkezni vagy könyvtárat váltani.
Az oldalhoz való hozzáférés engedélyezést igényel. Megpróbálhatod a könyvtár váltását.
Ne rendeljen hozzá
gsl::spanvagystd::string_viewadjon hozzá hivatkozást. Ezek olcsók, és nem tulajdonosai a mögöttes adatoknak. (gsl.view)
Egy életre vonatkozó probléma hivatkozása gsl::span vagy std::string_view jelzése lehet.
C++ alapvető irányelvek
Ez a szabály a standard tárolókból az új span- és nézettípusokba migrált kódban előforduló apró élettartam-problémákat rögzíti. Az ilyen típusok "pufferekre mutató hivatkozásoknak" tekinthetők. Egy spanra vagy nézetre mutató hivatkozással további indirekt réteg jön létre. Az ilyen közvetettség gyakran szükségtelen, és zavaró lehet a karbantartók számára. A spanok másolása olcsó, és függvényhívásokból származó érték alapján adható vissza. Nyilvánvaló, hogy az ilyen hívás eredményeire soha nem kell hivatkozni.
Megjegyzések
- A szabály a gsl::span<>, gsl::basic_string_span<> és std::basic_string_view<> hivatkozásokat észlel (beleértve a példányok aliasait is).
- Jelenleg csak deklarációk és visszatérési utasítások esetén jelenik meg figyelmeztetés. Ez a szabály a jövőben kiterjeszthető a függvényparaméterek megjelölésére is.
- A szabály végrehajtása egyszerű, és nem kísérli meg nyomon követni a tényleges élettartamokat. A hivatkozások használata bizonyos esetekben még mindig értelmes lehet. Ilyen esetekben a hamis pozitív értékek biztonságosan elfojthatók.
Kódelemzés neve: NO_SPAN_REF.
példa
Hivatkozás ideiglenesre:
// 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.