template<class T>int compare( const T a, const T b)
{
std::cout<<a<<" compare "<<b<<" result is ";
if(a<b)
return -1;
if(b<a)
return 1;
return 0;
}
如上简单的函数模版却遇到了相当多无法理解的问题。运行如下代码
int x(2);
std::string s1("bc"),s2("bc");
x = compare(s1,s2);
std::cout<<x<<'\n';
x = compare("bcb","bc");
结果为

第二个结果显然是错误的。
但是把s1也该为"bcb",让第2行代码的参数值和第5行的参数一样,如下
int x(2);
std::string s1("bcb"),s2("bc");
x = compare(s1,s2);
std::cout<<x<<'\n';
x = compare("bcb","bc");
第二个结果就正确了。
同样的我们修改第5行的第二个参数,使其和第2行代码的第二个参数的值不一样,
int x(2);
std::string s1("bcb"),s2("bc");
x = compare(s1,s2);
std::cout<<x<<'\n';
x = compare("bcb","bcf");结果

可以看出第4行的结果再次出现错误。
从结果可以看出只有当第2行代码实参的值和第5行代码实参一样,第5行的运行结果才正确。运行环境为VC6.0
int compare( const T &a, const T &b)
{
std::cout<<a<<" compare "<<b<<" result is ";
if(a<b)
return -1;
if(b<a)
return 1;
return 0;
}
运行如下代码
int x(2);
std::string s1("bc"),s2("bc");
x = compare(s1,s2);
std::cout<<x<<'\n';
x = compare("bcb","bc");第6行却出现如下错误error C2782: 'int __cdecl compare(const T &,const T &)' : template parameter 'T' is ambiguous
could be 'char [3]'
or 'char [4]'

4533

被折叠的 条评论
为什么被折叠?



