以下の式return max(max(x, y), z);
の中のmax(x, y)
というコールのオーバーロードの解像度が、テンプレート以外の関数char const* max(char const*, char const*)
を呼び出すのはなぜですか? x
はconst char* const&
とy
がconst char* const&
であるよう以下の過負荷解決がテンプレート以外の関数を呼び出すのはなぜですか?
は、私の知る限り理解できるよう、機能max<const char*>(x, y)
は、前者よりも優れたフィット感です!
#include <iostream>
template <typename T>
T const& max (T const& x, T const& y)
{
return x < y ? y : x;
}
char const* max (char const* x, char const* y)
{
return std::strcmp(x, y) < 0 ? y : x;
}
template <typename T>
T const& max (T const& x, T const& y, T const& z)
{
return max (max(x, y), z);
}
int main()
{
const char* sx = "String_x";
const char* sy = "String_y";
const char* sz = "String_z";
max(sx, sy, sz);
}
同じシグネチャを有していません。 – Belloc