诡异的函数模版实例化

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]'




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值