2012-09-03 19 views
5

:C++ 11: const ve formatlar üzerinde auto` `aksiyonu için standart ref bir tür T olduğunu varsayalım

T f11(); 
T& f12(); 
T&& f13(); 
const T f21(); 
const T& f22(); 
const T&& f23(); 

ve:

typedef ... T; 

ve sonra bu işlevleri sonra bunları böyle diyoruz: kesitler/C++ 11 standardın maddeleri o x11..x23 eşdeğer olmayan oto beyanlarını sonucuna varılabilir Kullanıcılar hangi

auto x11 = f11(); 
auto x12 = f12(); 
auto x13 = f13(); 
auto x21 = f21(); 
auto x22 = f22(); 
auto x23 = f23(); 

?

+0

Şimdi bekle. 'typedef ... T;' herhangi bir normal derleyici derleme hatalarını çıkarır –

+1

@ BЈовић: '...' bu bağlamda herhangi bir geçerli tür için bir yer tutucudur. ('... 'bazı yerlerde de geçerli C++' olduğu gerçeğinden değil) –

+0

İşte. – sehe

cevap

5

Bu, §7.1.6.4 otomatik belirteci içeriğidir. İşlev dönüş türlerinizdeki örneklerde, şablon argüman kesintisi kuralları geçerlidir. standarttan ilgili bir örnek Paraquoting

:

const auto &i = expr;

i türüdür çağrı takip icat işlev şablon f(expr) parametre X türetilmiş türü:

template <class AUTO> void f(const AUTO& X);

Örnekleriniz, tüm değişkenlerinizin x11 için x23 türünün T olduğu sonucuna varılmıştır.

+0

kolayca düzeltildi. Yani, şablon g (Tt); 'g (f())' ve 'auto t = f()' ifadesi, her iki durumda da aynı t türüne neden olur mu? –

+0

@ AndrewTomazos-Standart örneğindeki "const auto & i = expr" ve "template void f" (const U & u); ') örneğidir. Burada, 'i' türünde 'u' türetilmiş tür (f) – juanchopanza

+2

Özellikle, bu her bir çıkarılan değişkenin türünün "T" olacağı anlamına gelir. –

İlgili konular