3
下面的代碼在編譯時會引發編譯錯誤。如何將const char *作爲參數接近匹配const int&?的方法?
template <typename T>
inline T const& max (T const& a, T const& b)
{
return a < b ? b : a;
}
// maximum of two C-strings (call-by-value)
inline char const* max (char const* a, char const* b)
{
return strcmp(a,b) < 0 ? b : a;
}
// maximum of three values of any type (call-by-reference)
template <typename T>
inline T const& max (T const& a, T const& b, T const& c)
{
return max (max(a,b), c);
}
int main()
{
::max(7, 42, 68);
}
在編譯時出現錯誤:
error: call of overloaded 'max(const int&, const int&)' is ambiguous
note: candidates are:
note: const T& max(const T&, const T&) [with T =int]
note: const char* max(const char*, const char*)
如何最大(爲const char *,爲const char *)成爲最大近匹配(const int的&,const int的&)的時候,我們有匹配呼叫的模板方法?
試試這個'爲const char * x = 42;'那應該是你的問題 – Kal
什麼編譯器?它適用於我:http://coliru.stacked-crooked.com/a/d125ccc03238992e – aschepler
你的函數返回一個const引用,並且你正在傳遞一個tempval。從技術上講,該模板甚至不適合。如果從模板返回類型中刪除'const&',它會改變嗎? – WhozCraig