, bu soru ben kolay yolu auto mul(T x, U y) -> decltype(x*y)
yazmak için anlamak ???
Bu sözdizimi nedir "decltype (* (T *) (0) ** (U *) (0))" demek? Ben <a href="https://isocpp.org/wiki/faq/cpp11-language-misc#suffix-return" rel="noreferrer">this question on isocpp FAQ here</a> okuyorum
template<class T, class U>
??? mul(T x, U y)
{
return x*y;
}
için dönüş türü nasıl yazılacağını anlatan edilir ancak soru da tarafından ???
yerini alacak başka bir yol verir decltype(*(T*)(0)**(U*)(0))
. Ama bu decltype(*(T*)(0)**(U*)(0))
gerçekten ne yaptığını tam olarak anlamadım, bu geçici bir işaretçi T*
ilan ve görünür sıfırlamak ve sonra işaretçi, daha sonra U
tür için aynı karşılığı ile çoğaltılır, benim anlayış doğru mu?
Ancak neden işaretçileri kullanıyorsunuz? Bence decltype(T(0)*U(0))
veya decltype(T{0}*U{0})
da çalışmalıdır.
yapar 've' U' tek bir tamsayı parametresi alan bir kurucu var. İşaretçi yolu "T" ve "U" yapımcıları hakkında bir varsayım yapmaz. –
Not, [değerlendirilmemiş bir bağlamda] olduğu için tanımlanmamış bir davranış değildir (http://stackoverflow.com/a/28723577/1708801) –