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 ilis.
Pedoman Inti C++: ES.63: Jangan ikatan
Bahasa ini memungkinkan pemotongan dan dapat dilihat sebagai kasus khusus dari pemeran implisit berbahaya. Bahkan jika itu dilakukan dengan sengaja dan tidak menyebabkan masalah segera, itu masih sangat tidak disarankan. Ini membuat kode lebih sulit diubah, dengan memaksa persyaratan tambahan pada jenis data terkait. Ini terutama benar jika jenis polimorfik atau melibatkan manajemen sumber daya.
Keterangan
Aturan ini memperingatkan tidak hanya pada penugasan eksplisit, tetapi juga pada pemotongan implisit. Pemotongan implisit terjadi ketika hasil dikembalikan dari fungsi saat ini, atau ketika data diteruskan ke fungsi lain.
Aturan ini juga menandai kasus di mana penugasan tidak melibatkan pemotongan data nyata (misalnya, jika jenis kosong atau tidak membuat manipulasi data berbahaya). Peringatan tersebut masih harus diperbaiki untuk mencegah regresi yang tidak diinginkan jika jenis atau perilaku data berubah di masa mendatang.
Contoh
Dalam contoh kode berikutnya, kita membaca id_ex, tetapi pemanggil fungsi hanya akan mendapatkan ikatan objek:
struct id {
int value;
};
struct id_ex : id {
int extension;
};
bool read_id(stream &s, id &v) {
id_ex tmp{};
if (!s.read(tmp.value) || !s.read(tmp.extension))
return false;
v = tmp; // C26437
return true;
}
Untuk memperbaiki masalah, perbarui fungsi untuk menggunakan jenis yang benar:
// ...
bool read_id(stream &s, id_ex &v) {
// ...