Jegyzet
Az oldalhoz való hozzáférés engedélyezést igényel. Próbálhatod be jelentkezni vagy könyvtárat váltani.
Az oldalhoz való hozzáférés engedélyezést igényel. Megpróbálhatod a könyvtár váltását.
Ne végezzen típuskonverziót mutatók között, ahol a forrástípus és a céltípus megegyezik.
C++ alapvető irányelvek: Type.1: A leadások elkerülése
Ez a szabály segít eltávolítani a szükségtelen vagy gyanús szereplőket. Nyilvánvaló, hogy ha egy típust átalakítanak önmagává, az ilyen átalakítás hatástalan. Az a tény azonban, hogy a leadást használják, apró tervezési problémát vagy regressziós potenciált jelezhet, ha a típusok a jövőben változnak. Mindig biztonságosabb, ha a lehető legkevesebb szereplőt használjuk.
Megjegyzések
- Ez a szabály statikus és újraértelmezett leadásokhoz van implementálva, és csak a mutatótípusokat ellenőrzi.
példa
veszélyesen általános keresés
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);
}
veszélyesen általános keresés – átdolgozva
// ...
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;
}
// ...