请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

输出“hello”的原因

#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”呢?是因为这里比较的值是地址的原因吗?

正在回答 回答被采纳积分+3

2回答

董曼巴 2021-08-25 19:15:46

这个地方,比较的是 字符串常量地址的大小。字符串常量在系统内存的文字常量区中地址跟在代码中声明的顺序是没有必然关系的。hello 地址可以大于 world,也可能小于 world。我再mac 上运行的代码,world 地址更大一些,此处输出的是 world

1 回复 有任何疑惑可以回复我~
quickzhao 2020-08-02 16:10:20

这里你犯了两个错误:第一,这里比较字符串大小不是比较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 回复 有任何疑惑可以回复我~
  • 这个有必要用模版特化么??没体现出模版的特点来
    回复 有任何疑惑可以回复我~ 2021-07-14 21:54:06
  • quickzhao 回复 xxxxjase #2
    是不一定需要使用模板特化,但这里比较方法如果针对字符串比较的特殊情况使用特化版可以解决当前问题的。
    回复 有任何疑惑可以回复我~ 2021-07-15 17:10:07
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信