Avertissement C26473
N’effectuez pas de cast entre les types de pointeurs où le type source et le type cible sont identiques.
Instructions principales C++ : Type.1 : Éviter les casts
Cette règle permet de supprimer des casts inutiles ou suspects. Évidemment, lorsqu’un type est converti en lui-même, une telle conversion est inefficace. Pourtant, le fait que le cast est utilisé peut indiquer un problème de conception subtil ou un potentiel de régression si les types changent à l’avenir. Il est toujours plus sûr d’utiliser autant de casts que possible.
Notes
- Cette règle est implémentée pour les casts statiques et les casts réinterprets, et case activée uniquement les types de pointeurs.
Exemple
recherche dangereusement générique
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);
}
recherche dangereusement générique - retravaillée
// ...
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;
}
// ...
Commentaires
https://aka.ms/ContentUserFeedback.
Bientôt disponible : Tout au long de 2024, nous allons supprimer progressivement GitHub Issues comme mécanisme de commentaires pour le contenu et le remplacer par un nouveau système de commentaires. Pour plus d’informations, consultezEnvoyer et afficher des commentaires pour