首次编写最小值模板函数:起步代码是否符合要求的技术问询
你的初始代码和需求不匹配,我来帮你修正并解释清楚
首先,咱们对照你的需求拆解下当前代码的问题:
- 你需要接收两个同类型T的对象,但你定义了两个模板参数
T1和T2,这会让函数默认支持不同类型的参数,不符合你的要求; - 参数列表里写了
const T1(没加引用)和多余的int size,既没满足“常量引用”的要求,还多了无关参数; - 返回值用
T1也不合适,既然两个参数都是同类型T,返回值也应该和参数类型一致。
下面是完全符合你需求的模板函数写法:
template <typename T> T minimum(const T& a, const T& b) { // 用三元运算符简洁返回较小值,也可以换成if-else写法 return (a < b) ? a : b; }
我给你拆解下每部分的作用:
template <typename T>:这里用typename(和class效果完全一致,只是typename更清晰表示这是一个类型)定义了单个模板参数T,确保两个参数都是同一类型;const T& a, const T& b:const保证我们不会修改传入的对象,&表示引用传递,避免对大对象做不必要的拷贝,完美匹配你“对应T类型对象的常量引用”的要求;- 返回值
T:返回的是两个T类型对象中的较小值,类型和参数保持一致; - 函数体的三元运算符是简化写法,如果你觉得不直观,也可以写成:
if (a < b) { return a; } else { return b; }
最后给你提个小提醒:这个模板函数要求T类型必须支持<运算符哦。如果是你自己定义的类,需要重载operator<才能正常使用这个函数。
内容的提问来源于stack exchange,提问作者Tristie White
相关产品推荐
相关产品推荐

