-->
当前位置:首页 > 题库 > 正文内容

函数题:最大值(函数模板)

Luz3年前 (2022-06-14)题库729
请设计求两个对象最大值的函数模板。


#include <iostream>
using namespace std;

/* 你提交的代码将被嵌在这里 */

int main()
{
int a, b, c;
cin >> a >> b;
c = Max(a, b);
cout << c << endl;
return 0;
}


#### 输入样例

in
37 29


#### 输出样例

out
37








答案:若无答案欢迎评论

首先看下面的模板

c++
template <typename TYPE>
TYPE Max(TYPE x, TYPE y)
{
return x >= y ? x : y;
}


函数的参数是对象,函数值也是对象,将会执行拷贝构造函数和析构函数。

再看下面的模板

c++
template <typename TYPE>
TYPE& Max(TYPE &x, TYPE &y)
{
return x >= y ? x : y;
}


函数的参数是引用,函数值也是引用,函数里没有定义新对象,不会执行拷贝构造函数和析构函数。但函数的参数为普通引用,不能引用常量。

因此,正确答案应该是:

c++
template <typename TYPE>
TYPE& Max(const TYPE &x, const TYPE &y)
{
return (TYPE&)(x >= y ? x : y);
}




c++
template <typename TYPE>
TYPE& Max(const TYPE &x, const TYPE &y)
{
return const_cast<TYPE&>(x >= y ? x : y);
}


说明:函数的参数是常量引用,函数值是普通引用,因此需要做强制类型转换。

当然,下面的答案也能通过测试。

c++
template <typename TYPE>
const TYPE& Max(const TYPE &x, const TYPE &y)
{
return x >= y ? x : y;
}

发表评论

访客

◎欢迎参与讨论,请在这里发表您的看法和观点。