Aviso C26473
Não converta os tipos de ponteiro nos quais o tipo de origem e o de destino são os mesmos.
Diretrizes Principais do C++: Type.1: Evitar conversões
Essa regra ajuda a remover conversões desnecessárias ou suspeitas. Obviamente, quando um tipo é convertido em si mesmo, tal conversão é ineficaz. No entanto, o fato de o elenco ser usado pode indicar um problema sutil de design ou um potencial de regressão se os tipos mudarem no futuro. É sempre mais seguro usar o menor número possível de moldes.
Comentários
- Essa regra é implementada para transmissões estáticas e reinterpretações e verifica apenas os tipos de ponteiro.
Exemplo
pesquisa perigosamente genérica
gsl::span<server> servers_;
template<class T>
server* resolve_server(T tag) noexcept {
auto p = reinterpret_cast<server*>(tag); // C26473, also 26490 NO_REINTERPRET_CAST
return p >= &(*servers_.begin()) && p < &(*servers_.end()) ? p : nullptr;
}
void promote(server *s, int index) noexcept {
auto s0 = resolve_server(s);
auto s1 = resolve_server(index);
if (s0 && s1)
std::swap(s0, s1);
}
pesquisa perigosamente genérica - retrabalhada
// ...
server* resolve_server(server *p) noexcept {
return p >= &(*servers_.begin()) && p < &(*servers_.end()) ? p : nullptr;
}
server* resolve_server(ptrdiff_t i) noexcept {
return !servers_.empty() && i >= 0 && i < servers_.size() ? &servers_[i] : nullptr;
}
// ...
Comentários
https://aka.ms/ContentUserFeedback.
Em breve: Ao longo de 2024, eliminaremos os problemas do GitHub como o mecanismo de comentários para conteúdo e o substituiremos por um novo sistema de comentários. Para obter mais informações, consulteEnviar e exibir comentários de