Oharra
Orrialde honetara sartzeak baimena behar du. Saioa hasteko edo direktorioak aldatzen saia zaitezke.
Orrialde honetara sartzeak baimena behar du. Direktorioak aldatzen saia zaitezke.
No convertir entre tipos de puntero donde el tipo de origen y el tipo de destino sean iguales.
C++ Core Guidelines: Type.1: Evitar conversiones
Esta regla ayuda a quitar conversiones innecesarias o sospechosas. Obviamente, cuando un tipo se convierte a sí mismo, esta conversión no es eficaz. Sin embargo, el hecho de que se use la conversión puede indicar un problema de diseño sutil o una posibilidad de regresión si los tipos cambian en el futuro. Siempre es más seguro usar tantas conversiones como sea posible.
Comentarios
- Esta regla se implementa para conversiones estáticas y conversiones de reinterpretación, y comprueba solo los tipos de puntero.
Ejemplo
búsqueda genérica peligrosa
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);
}
búsqueda genérica peligrosa (rehecha)
// ...
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;
}
// ...