输出“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

1
0

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;

}


0
2
quickzhao
回复
xxxxjase
是不一定需要使用模板特化,但这里比较方法如果针对字符串比较的特殊情况使用特化版可以解决当前问题的。
2021-07-15
共2条回复

重学C++ ,重构你的C++知识体系

一部大片,一段历史,构建C++知识框架的同时重塑你的编程思维

3884 学习 · 1103 问题

查看课程