Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Jangan transmisikan antara jenis penunjuk di mana jenis sumber dan jenis target sama.
Pedoman Inti C++: Type.1: Hindari cast
Aturan ini membantu menghapus cast yang tidak perlu atau mencurigakan. Jelas, ketika jenis dikonversi ke dirinya sendiri, konversi seperti itu tidak efektif. Namun fakta bahwa pemeran digunakan dapat menunjukkan masalah desain yang halus atau potensi regresi jika jenis berubah di masa mendatang. Selalu lebih aman untuk menggunakan transmisi seserang mungkin.
Keterangan
- Aturan ini diimplementasikan untuk cast statis dan reinterpret cast, dan hanya memeriksa jenis pointer.
Contoh
pencarian generik berbahaya
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);
}
pencarian generik berbahaya - dikerjakan ulang
// ...
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;
}
// ...