referans:değer başlatma const üyesinin aşağıdaki formu kod arıyorum
class foo
{
public:
foo() {}
//...
};
class bar
{
public:
bar() : ref() {}
private:
const foo &ref;
};
doğru bu şekilde geçici kullanarak bir başvuru başlatılıyor mı? Yerel bir değişken olan bir const referansının bir geçici ile başlatılmasının mümkün olduğunu biliyorum ve bunu yapmak, geçici olarak, örn.
const foo &tmp = funcThatReturnsByValue(); //OK
Bununla birlikte, ilgili initialize reference in initialization list verilen cevapların bir "kısa ömürlü" ve "uzun ömürlü" referansları, ve yukarıdaki gibi ref
başlatılıyor olduğu tanımlanmamış bir davranış (hatta ref
olsa arasında bir fark olduğunu göstermektedir const
referansıdır).
Standartta 12.2.5, "Bir yapıcının ctor-initializer öğesindeki referans üyesine geçici olarak bağlı, yapıcı çıkana kadar devam eder." Bu durumu açıklayan mı?
Kodunuzu, aslında geçici bir şekilde içerecek şekilde düzeltebilir misiniz? –
ref(), geçici bir örnek olayına ref başvurmuyor mu? Terminolojim kesin değilse üzgünüm ... Bu kod snippet'ini anlamak için elimden geleni yapıyorum. – user168715
Belki bu yorum değersizdir (bu koda baktığınız bağlamı bilmiyorum), ancak 'ref' bir işaretçiyse sorun ortadan kalkar. Buradaki nokta, referansların değer olarak başlatılamaması, ancak işaretçilerin (sıfır başlatılmış olmaları) olabilir. Ayrıca, çoğu derleyici (en azından MSVC), bir varsayılan atama işleci oluşturamadığı için bir uyarı verir. Bir kılavuz olarak, bir referans üye istediğinde, aslında bir işaretçi istersiniz ... –