2014-11-04 43 views
0

在C++中我們有模板函數。例如:C++順序修飾符

template<class A,class B> 
void something(A a, B b){ 
    //do something 
} 

編譯器如何猜測類型A和B的修飾符?他們可能是A,A &,const A & etc ... 它用來選擇類型修飾符的標準是什麼?它是由標準規定的嗎?

+0

什麼?你什麼意思。程序員指定修飾符。模板系統不會改變任何東西。這個問題對我來說沒有多大意義。 「拾取類型修飾符」是什麼意思? – luk32 2014-11-04 10:26:36

+0

雖然C++ 11 auto已經在某些地方改變了事情(但大多數情況仍然一樣),但這不是一個猜測事項。如果'void something(A a,B b)'被聲明,那麼你不能傳遞'const A'或'const&A',因爲你違反了你的簽名。模板的工作原理是您在設計模式中使用「泛型」而不是具體細節。編譯器查看定義並簡單地映射實現。如果你有像合成性錯誤,簽名不匹配,類型不匹配等愚蠢的東西,編譯器當然會大聲喊出來。 – ha9u63ar 2014-11-04 10:26:48

回答

1

是的標準有一些相當複雜的類型扣除規則。他們在這裏引用的時間太長,但希望知道C++本身恰好指定了行爲就足以滿足您。請注意,auto的規則幾乎相同。