我讀this question on isocpp FAQ here,這個問題是解釋如何編寫的返回類型???
這句「decltype(*(T *)(0)**(U *)(0))」是什麼意思?
template<class T, class U>
??? mul(T x, U y)
{
return x*y;
}
我明白最簡單的方式就是寫auto mul(T x, U y) -> decltype(x*y)
,但是問題也給出了另一種方式,是通過更換???
decltype(*(T*)(0)**(U*)(0))
。但我不完全明白這是什麼decltype(*(T*)(0)**(U*)(0))
真的在做什麼,它似乎是宣佈一個臨時指針T*
並初始化爲零,然後解引用指針,然後乘以相同的對手類型U
,我的理解是正確的嗎?
但爲什麼要使用指針?我認爲decltype(T(0)*U(0))
或decltype(T{0}*U{0})
也應該工作。
即假定'T '和'U'有一個構造函數,它接受一個整數參數。指針的方式不會假設「T」和「U」的構造函數。 –
請注意,它不是未定義的行爲,因爲它[在未評估的上下文中](http://stackoverflow.com/a/28723577/1708801) –