#include <iostream>
const char* max(const char* a, const char* b) {
return strcmp(a,b) < 0 ? b : a;
}
template <typename T>
const T& max(const T& a, const T& b, const T& c)
{
return max(max(a,b),c);
}
int main()
{
char* a = "abc";
char* b = "cde";
char* c = "def";
const char* r = max(a,b);
char* s = max(a,b,c);
return 0;
}
はコンパイルできません。テンプレート関数の参照型変換?
max3a.cpp:9:12: error: invalid conversion from 'const char*' to 'char*' [-fpermissive]
return max(max(a,b),c);
私は
template <typename T>
const T& max(const T& a, const T& b, const T& c)
{
(const T)return max(max(a,b),c);
}
にテンプレート機能を変更する場合、それが正常にコンパイルされます。
T
がchar *
場合、max(max(a,b),c)
のタイプはconst T
ある、const char*
あります。どうして?
と定義しています。 2行目から 'const'を削除することができます。 – SpamBot
おそらく、' char * max(char *、char *) 'のオーバーロードが必要です。 –
'char * a =" abc ";'は無効ですC++、 'const char * a =" abc ";' – Jarod42