DÜZENLEME: Bazılarını denedim ve bir şeyin düşündüğümden biraz daha ince olduğunu keşfettim. İşte şimdi doğru bir cevap olduğunu düşündüğüm şey.
&sbir değer değildir, bu nedenle referansın türü referans olmadıkça ona referans oluşturamazsınız const. Yani örneğin yapamazsınız
string * &r = &s;
ama yapabilirsin
string * const &r = &s;
İşlev başlığına benzer bir bildirim koyarsanız, çalışacaktır.
void myfunc(string * const &a) { ... }
Geçiciler denen başka bir konu daha var. Kural, geçici bir referansı ancak öyleyse alabilmenizdir const. Bu durumda, & s'nin geçici olduğu ve bu nedenle beyan edilmesi gerektiği iddia edilebilir.const fonksiyon prototipinde . Pratik açıdan bakıldığında, bu durumda hiçbir fark yaratmaz. (Bu ya bir r değeri ya da bir geçici. Her iki durumda da aynı kural geçerlidir.) Bununla birlikte, kesin konuşmak gerekirse, bunun geçici değil, bir r değeri olduğunu düşünüyorum. İkisini birbirinden ayırmanın bir yolu var mı merak ediyorum. (Belki de basitçe, tüm geçicilerin r değerleri olduğu ve tüm l olmayan değerlerin geçici olduğu tanımlanmıştır. Standart konusunda bir uzman değilim.)
Bununla birlikte, sorununuz muhtemelen daha yüksek bir seviyededir. Neden adresine bir referans istiyorsun s? Bir işaretçiye başvuru istiyorsanız s, aşağıdaki gibi bir işaretçi tanımlamanız gerekir.
string *p = &s;
myfunc(p);
Bir referans sveya bir işaretçi istiyorsanız s, basit olanı yapın.
string* const& valörneğinconst string* &val. Benim gözümde bu açıkça bir göstericiye, dizgeye sabit bir referanstır . Bu kesin açıklamayı elde etmek için beyannameT const&yerine kişisel olarak yazmayı tercih ediyorumconst T&.