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.
Esta é uma operação de cópia potencialmente cara. Considerar a utilização de uma referência, a menos que seja necessária uma cópia (p.9)
Observações
Para obter mais informações, consulte P.9: Não perca tempo ou espaço nas diretrizes principais do C++.
Esta verificação abrange comportamentos não óbvios e fáceis de perder ao atribuir uma referência a uma variável marcada como auto. O tipo da variável auto é resolvido para um valor, em vez de uma referência, e uma cópia implícita é feita.
Esse aviso não é gerado para escalares, ponteiros inteligentes ou visualizações. Também não é aumentado para tipos cujo tamanho não é mais do que o dobro do tamanho do ponteiro dependente da plataforma.
Este aviso não é emitido quando a variável sofre mutação, pois marcá-la
auto&introduziria efeitos colaterais à mutação.Esse aviso não é gerado quando a referência vem de um objeto temporário, porque isso resulta em uma referência pendente. Por exemplo:
std::optional<int> TryGetNumber(); ... const auto& val = TryGetNumber().value(); val++; // Temporary from TryGetNumber() is destroyed and val is now dangling
Exemplo
Este exemplo mostra uma definição de variável que faz uma cópia potencialmente cara quando atribuída uma referência:
const Object& MyClass::getRef() { ... }
...
auto ref = myclass.getRef(); // C26820 (`ref` takes a copy of the returned object)
Para resolver esse problema, declare a variável usando const auto& :
const Object& MyClass::getRef() { ... }
...
const auto& ref = myclass.getRef(); // OK