C++11引入了decltype關鍵字,用于推導表達式的類型。它的規則可以概括為以下幾點:
如果表達式是一個標識符(變量名或函數名),則推導出它的類型。例如:int x = 5; decltype(x)
的類型是int。
如果表達式是一個函數調用,返回值的類型就是推導結果的類型。例如:int f(); decltype(f())
的類型是int。
如果表達式是一個左值,則推導出它的類型為引用類型。例如:int x = 5; decltype((x))
的類型是int&。
如果表達式是一個右值,則推導出它的類型為非引用類型。例如:int x = 5; decltype(x + 1)
的類型是int。
如果表達式是一個具有多個重載函數的函數調用,則推導失敗。需要使用標準庫類型std::common_type來進行推導。例如:int f(int); double f(double); decltype(std::common_type<int, double>::type())
將推導出double類型。
如果表達式是一個無法通過編譯的表達式,則推導失敗。例如:decltype(undeclared_variable)
將導致編譯錯誤。
這些規則可以幫助我們在編譯時推導出表達式的類型,進而進行更靈活和安全的編程。