Notes
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
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 vérifie 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;
}
// ...