一个编译时多态的例子:为什么调用的是double的那个函数,该如何解决

一个编译时多态的例子:为什么调用的是double的那个函数
如题:

#include <iostream.h>
char           max   (   char   x,   char   y   )   {   return   x> y?x:y;   }
int                 max   (   int   x,   int   y   )               {   return   x> y?x:y;   }
float           max   (   float   x,   float   y   )   {return   x> y?x:y;   }
double     max   (double   x,   double   y   )   {return   x> y?x:y;   }
void   main()
{
cout < <max( 'd ', 's ') < <endl;
cout < <max(28,168) < <endl;
cout < <max(3.14,2.718) < <endl;
}

语句cout < <max(3.14,2.718) < <endl;为什么调用的是double     max   (double   x,   double   y   )函数?

------解决方案--------------------
3.14,2.718浮点常量默认是double的
------解决方案--------------------
up LS
------解决方案--------------------
要想调用float版的可以这样写:
max((float)3.14,(float)2.718)
或者是
max(3.14f,2.718f)