Nota
O acesso a esta página requer autorização. Podes tentar iniciar sessão ou mudar de diretório.
O acesso a esta página requer autorização. Podes tentar mudar de diretório.
Não atribua
gsl::spanoustd::string_viewa uma referência. Eles são baratos de construir e não são proprietários dos dados subjacentes. (gsl.vista)
Uma referência a gsl::span ou std::string_view pode ser uma indicação de um problema vitalício.
Diretrizes principais do C++
Esta regra deteta problemas sutis de tempo de vida que podem ocorrer no código migrado de contêineres padrão para novos tipos de extensão e exibição. Esses tipos podem ser considerados como "referências a buffers". O uso de uma referência a uma extensão ou exibição cria uma camada extra de indireção. Essa indireção é muitas vezes desnecessária e pode ser confusa para os mantenedores. Os Spans são baratos de copiar e podem ser retornados pelo valor de chamadas de função. Obviamente, tais resultados de chamada nunca devem ser referenciados.
Observações
- A regra deteta referências a gsl::span<>, gsl::basic_string_span<> e std::basic_string_view<> (incluindo aliases para instanciações).
- Atualmente, os avisos são emitidos apenas em declarações e declarações de retorno. Esta regra pode ser estendida no futuro para também sinalizar parâmetros de função.
- A implementação desta regra é leve não tenta rastrear vidas reais. O uso de referências ainda pode fazer sentido em alguns cenários. Nesses casos, os falsos positivos podem ser suprimidos com segurança.
Nome da análise de código: NO_SPAN_REF
Exemplo
Referência a um temporário:
// 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.