私の教授は私にこの任務を与えてくれました。
Maxと呼ばれるジェネリック関数を実装します。これはジェネリック型の3つの引数を取り、これらの3つから最大値を返します。char*型に特化した関数を実装します。
これが私のコードです:
#include <iostream>
#include <string>
using namespace std;
template<typename T>
T Max(T first,T second,T third )
{
if(first > second)
{
if(first > third)
{
return first;
}
else
{
return third;
}
}
else if(second > third)
{
return second;
}
else
{
return third;
}
}
template<>
char* Max(char* first,char* second,char* third)
{
if(strcmp(first, second) > 0)
{
if(strcmp(first, third) > 0)
{
return first;
}
else
{
return third;
}
}
else if(strcmp(second, third) > 0)
{
return second;
}
else
{
return third;
}
}
int main(void)
{
cout << "Greatest in 10, 20, 30 is " << Max(10, 20, 30) << endl;
char a = 'A';
char b = 'B';
char c = 'C';
char Cptr = *Max(&a, &b, &c);
cout << "Greatest in A, B ,C is " << Cptr << endl;
string d = "A";
string e = "B";
string f = "C";
string result = *Max(&d, &e, &f);
cout << "Greatest in A, B, C is " << result << endl;
}
出力:
10、20、30で最大は30
A、B、Cで最大はCで
最大A、B、CはAで最大
問題 :
Max関数A、B、Cでcharデータ型を渡すと、Cが返されますが、文字列データ型A、B、Cを渡すと、Aが返されます。
なぜここにAが返されるのですか?