Ескертпе
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Жүйеге кіруді немесе каталогтарды өзгертуді байқап көруге болады.
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Каталогтарды өзгертуді байқап көруге болады.
Не приведение между типами указателей, где исходный тип и целевой тип совпадают.
Основные рекомендации по C++ : Type.1: избегайте приведения
Это правило помогает удалить ненужные или подозрительные приведения. Очевидно, что при преобразовании типа в себя такое преобразование неэффективно. Тем не менее, тот факт, что приведение используется, может указывать на тонкий вопрос проектирования или потенциал для регрессии, если типы изменяются в будущем. Всегда безопаснее использовать как можно меньше приведения.
Замечания
- Это правило реализуется для статических приведения и повторной интерпретации приведения, а также проверяет только типы указателей.
Пример
опасно универсальный поиск
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);
}
опасно универсальный поиск - переработал
// ...
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;
}
// ...