采纳答案成功!
向帮助你的同学说点啥吧!感谢那些助人为乐的人
#include "stdafx.h" template<class T> T max(T a, T b) { return a > b ? a:b; } #include <iostream> using namespace std; int main() { cout << max("hello", "world") << endl; return 0; }
老师为啥上面输出的是“hello”呢?是因为这里比较的值是地址的原因吗?
这个地方,比较的是 字符串常量地址的大小。字符串常量在系统内存的文字常量区中地址跟在代码中声明的顺序是没有必然关系的。hello 地址可以大于 world,也可能小于 world。我再mac 上运行的代码,world 地址更大一些,此处输出的是 world
这里你犯了两个错误:第一,这里比较字符串大小不是比较ASCII码,这个很容易验证;第二,这里如果要使用ASCII码的字符串大小的比较方法可以使用const char*的模板特化。
template<>
const char* myMax(const char* a, const char* b)
{
int flag = strcmp(a, b);
return flag > 0 ? a : b;
}
这个有必要用模版特化么??没体现出模版的特点来
是不一定需要使用模板特化,但这里比较方法如果针对字符串比较的特殊情况使用特化版可以解决当前问题的。
登录后可查看更多问答,登录/注册
一部大片,一段历史,构建C++知识框架的同时重塑你的编程思维
1.2k 12
1.3k 10
1.2k 9
992 9