ruisai19830523 2016-02-23 13:24 采纳率: 0%
浏览 2055

C++模版函数的定义中的形参一定要用引用吗

老师是这样讲的:
template
<返回类型><函数名>(参数表)
{
函数体
}

template
T fuc(T x, int y)
{
T x;
//……
}
如果主调函数中有以下语句:
double d;
int a;
fuc(d,a);
则系统将用实参d的数据类型double去代替函数模板中的T生成函数:
double fuc(double x,int y)
{
double x;
//……
}

然后我是这么写的

template

T min(T x, T y)
{ return (x<y)?x:y; }

main()
{
cout< }
编译不能通过,居然提示
1>------ Build started: Project: test, Configuration: Debug Win32 ------
1>Compiling...
1>test.cpp
1>.\test.cpp(77) : error C2668: 'min' : ambiguous call to overloaded function
1> .\test.cpp(18): could be 'T min(T,T)'
1> with
1> [
1> T=double
1> ]
1> C:\Program Files\Microsoft Visual Studio 8\VC\include\xutility(3197): or 'const _Ty &std::min(const _Ty &,const _Ty &)'
1> with
1> [
1> _Ty=double
1> ]

我开始怎么看都找不到错在哪里,在我看来参数类型很明确了,然后我看了别人的例子,想了下,把模版定义的参数改成了引用
T min(T &x, T &y)
这样就行了,但是我并不明白为什么,这模版函数里也没有一定要改变形参值的语句,只是取数的话,不是直接(T x,T y)就行了么,老师也是这么讲的啊,为什么不行啊。用T min(const T &x,const T &y)也不行

  • 写回答

2条回答 默认 最新

  • oyljerry 2016-02-23 13:59
    关注

    你不用min 换个名字 mymin

    评论

报告相同问题?

悬赏问题

  • ¥15 stm32流水灯+呼吸灯+外部中断按键
  • ¥15 将二维数组,按照假设的规定,如0/1/0 == "4",把对应列位置写成一个字符并打印输出该字符
  • ¥15 NX MCD仿真与博途通讯不了啥情况
  • ¥15 win11家庭中文版安装docker遇到Hyper-V启用失败解决办法整理
  • ¥15 gradio的web端页面格式不对的问题
  • ¥15 求大家看看Nonce如何配置
  • ¥15 Matlab怎么求解含参的二重积分?
  • ¥15 苹果手机突然连不上wifi了?
  • ¥15 cgictest.cgi文件无法访问
  • ¥20 删除和修改功能无法调用