Saya memahami sintaks dan semantik umum dari pointer versus referensi, tetapi bagaimana saya harus memutuskan kapan lebih tepat atau kurang tepat untuk menggunakan referensi atau pointer dalam API?
Secara alami beberapa situasi memerlukan satu atau yang lain ( operator++
perlu argumen referensi), tetapi secara umum saya menemukan saya lebih suka menggunakan pointer (dan pointer const) karena sintaksnya jelas bahwa variabel sedang dilewatkan secara destruktif.
Misalnya dalam kode berikut:
void add_one(int& n) { n += 1; }
void add_one(int* const n) { *n += 1; }
int main() {
int a = 0;
add_one(a); // Not clear that a may be modified
add_one(&a); // 'a' is clearly being passed destructively
}
Dengan pointer, selalu (lebih) jelas apa yang terjadi, jadi untuk API dan sejenisnya di mana kejelasan adalah masalah besar, pointer tidak lebih tepat daripada referensi? Apakah itu berarti referensi hanya boleh digunakan bila perlu (misalnya operator++
)? Apakah ada masalah kinerja dengan satu atau yang lain?
EDIT (LUAR BIASA):
Selain memungkinkan nilai NULL dan berurusan dengan array mentah, tampaknya pilihannya adalah preferensi pribadi. Saya telah menerima jawaban di bawah ini yang merujuk pada Panduan Gaya C ++ Google , karena mereka menyajikan pandangan bahwa "Referensi dapat membingungkan, karena mereka memiliki sintaks nilai tetapi semantik penunjuk.".
Karena pekerjaan tambahan yang diperlukan untuk membersihkan argumen pointer yang tidak boleh NULL (misalnya add_one(0)
akan memanggil versi pointer dan istirahat selama runtime), masuk akal dari perspektif rawatan untuk menggunakan referensi di mana objek HARUS hadir, meskipun itu memalukan kehilangan kejelasan sintaksis.
add_one(a);
tidak jelas apa yang a
akan dimodifikasi? Dikatakan tepat di kode: tambahkan satu .
addOneTo(...)
. Jika bukan itu yang ingin Anda lakukan, lihat saja deklarasi tersebut.