输出“hello”的原因
来源:9-15 泛型编程之泛型函数2
wxz123
2020-08-01
#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”呢?是因为这里比较的值是地址的原因吗?
写回答
2回答
-
董曼巴
2021-08-25
这个地方,比较的是 字符串常量地址的大小。字符串常量在系统内存的文字常量区中地址跟在代码中声明的顺序是没有必然关系的。hello 地址可以大于 world,也可能小于 world。我再mac 上运行的代码,world 地址更大一些,此处输出的是 world
10 -
quickzhao
2020-08-02
这里你犯了两个错误:第一,这里比较字符串大小不是比较ASCII码,这个很容易验证;第二,这里如果要使用ASCII码的字符串大小的比较方法可以使用const char*的模板特化。
template<>
const char* myMax(const char* a, const char* b)
{
int flag = strcmp(a, b);
return flag > 0 ? a : b;
}
022021-07-15
相似问题