首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

一个简单的模板函数的有关问题

2013-11-25 
一个简单的模板函数的问题代码如下,当直接aa,cc 调用模板函数时,他是转换成了什么 类型进行比较呢,cha

一个简单的模板函数的问题
代码如下,当直接"aa","cc" 调用模板函数时,他是转换成了什么 类型进行比较呢,char[] ?char * ?么,为什么的出来的结果是 0呢。


template<typename T> int comp(const T &t1,const T &t2)
{
return t1<t2;
}

int main()
{
//string s1="aa",s2="cc";
//cout<<comp(s1,s2)<<endl;//如果是用string类型调用,得出正常结果 是 1 
cout<<comp("aa","cc")<<endl;//如果是这种直接填的c风格字符串,得出的结果是 0 ,不知道是转换成了什么类型进行比较,为什么得出的是 0,请高手解下疑惑,谢谢。
system("pause");
}
模板函数
[解决办法]
“aa”和“cc”的地址存在一个常量区里,它们的地址是确定的值,
你的模板比较函数比较的是它们首地址的大小,从结果来看,“aa”
存储的地址比“cc”的大,即小于符号不成立,返回0.你这里比较
的是地址,而不是内容。
你使用的string的话,string类重载了各种比较操作符,是会
比较内容的,即“aa”比“cc”小。
如果楼主想让c风格,也能返回1的话,模板里面使用return strcmp(t1,t2);
[解决办法]
引用:
哦哦,可是为什么 分配 的固定地址 “aa” 的要比 “cc” 大呢

你换下位置就不一定了,应该说前者的地址要比后者的大。

但这种说法其实也是不对的,分配这些地址是系统的事,系统没有必要保证这些地址谁大谁小,他只要保证有连续的空间保存这些值就OK了。比如前者的字符串常量比较长,但该段内存都是零零碎碎的(内存碎片),装不下这串字符串,他可能就会往后找,但如果后者比较短,就可能就分配在前面了。具体的要看系统如何分配的。

你要比较的是两者的内容而不是地址,对地址的比较是没有意义的。

热点排行