2015-06-16 28 views
6

Bugün bu gibi bazı kod gördüm: Doğru kod doğruysa neden'const decltype ((a))' bir const başvuru bildirmiyor?

int a = 0; 
const decltype((a)) x = 10; // Error 

const int b = 0; 
decltype ((b)) y = 42; // Correct 

ben görebilirsiniz, ama yanlış kodu yanlış neden göremiyorum.

Test ettim ve biraz garip buldum.

const decltype((a)) x = 10; Bu, const int& ürününü tanımlamalıdır? Ama derleme değil! error: non-const lvalue reference to type 'int' cannot bind to a temporary of type 'int'.

const decltype((a)) x = a; olarak değiştirdim ve sonra derler.

Eh, x bir const başvuru? Hayır, bu bir const-olmayan başvuru olduğunu buldum. a'un değerini x aracılığıyla değiştirebilirim.

const değiştiricisi neden etkili değil? constint& olan tam tipine uygulanmış ve int& için const ilave int sabit başvuru olup bu int& const yapar, çünkü

+4

'const', başvurulan türden ziyade referansa (ve yok sayılır) uygulanır. –

+3

, "decltype" ifadesini değiştiricilerle birleştirerek, "typedef" ed türüne değiştiricilerin uygulanması gibi çalışır. Metin ikamesi DEĞİLDİR. –

+0

@ T.C. @ ben-voigt Oh, anladım. Yani 'const' int' 'int' 'const referansı, tüm' 'const int &', const int başvuru için değil, kombine için değil, tüm vücuda uygulanır ... Doğru? – CyberLuc

cevap

8

hatalı kısım yanlıştır. Ancak referans, doğası gereği const'dur, bu yüzden const kısmı göz ardı edilir. Bu nedenle sonuç türü hala int&

İlgili konular