Referanslara karşı işaretçilerin sözdizimini ve genel anlambilimini anlıyorum, ancak bir API'da referansları veya işaretçileri kullanmanın ne zaman veya daha az uygun olduğuna nasıl karar vermeliyim?
Doğal olarak bazı durumların birine ya da diğerine operator++
ihtiyacı vardır ( bir referans argümana ihtiyaç duyar), ancak genel olarak, sözdiziminin değişkenlerin yıkıcı bir şekilde iletildiği açık olduğu için işaretçiler (ve sabit işaretçiler) kullanmayı tercih ediyorum.
Örneğin, aşağıdaki kodda:
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
}
İşaretçi ile her zaman (daha fazla) neler olduğu açıktır, bu yüzden açıklığın büyük bir endişe olduğu API'lar ve benzerleri için işaretçiler referanslardan daha uygun değildir? Bu demek oluyor ki referanslar sadece gerektiğinde kullanılmalı operator++
mı (örneğin )? Biriyle ya da diğeriyle ilgili herhangi bir performans kaygısı var mı?
DÜZENLE (AÇIK):
NULL değerlere izin vermenin ve ham dizilerle uğraşmanın yanı sıra, seçim kişisel tercihe bağlı görünüyor. Google'ın C ++ Stil Kılavuzu'na atıfta bulunan aşağıdaki cevabı kabul ettim .
NULL olmaması gereken işaretçi argümanlarını sterilize etmek için gereken ek çalışmalar nedeniyle (örn add_one(0)
. İşaretçi sürümünü çağıracak ve çalışma sırasında kırılacaktır), bir nesnenin mevcut olması gereken referansları kullanmak bir sürdürülebilirlik perspektifinden mantıklıdır, sözdizimsel netliğini kaybetmek.
add_one(a);
olanın belirsizliği ne a
olacak? Kodda doğru diyor: bir tane ekleyin .
addOneTo(...)
. Yapmak istediğiniz şey bu değilse, sadece bildirime bakın.