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.
&s
bir 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 s
veya 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&
.