這個問題在這里已經有了答案: C 模板顯式右值型別 (2 個答案) 5 天前關閉。
在下面的示例中,實體化的型別f<int&>(a)被報告為int&.
template<typename T>
const T& f(const T& x) {
return x;
}
int main() {
int a{0};
decltype(f<int&>(a))::_;
}
但為什么型別不是const int&?。
編輯:問題也是為什么f<int&>(0)給出xasint&而不是 as const int&?
uj5u.com熱心網友回復:
參考本身不能被const限定(只有它們參考的型別可以),因此在if是參考型別時const被忽略。const TT
References-to-references 也不存在。參考折疊規則說,試圖形成對 type 的左值參考的左值參考U將形成對 type 的左值參考U。
所以最后, ifT是左值參考型別,與, 在您的情況下const T&是相同的型別。Tint&
將模板引數作為參考并將回傳值作為對模板引數的參考并沒有什么意義。您可能只想f<int>(a)代替f<int&>(a). (雖然你沒有說你為什么對 的行為感興趣f<int&>。)
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/537518.html
標籤:C 功能模板
上一篇:將指標作為正確型別放入模板中的std::variant
下一篇:HTML模板和選擇器
