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 c程序不知道为什么得不到结果
  • ¥40 复杂的限制性的商函数处理
  • ¥15 程序不包含适用于入口点的静态Main方法
  • ¥15 素材场景中光线烘焙后灯光失效
  • ¥15 请教一下各位,为什么我这个没有实现模拟点击
  • ¥15 执行 virtuoso 命令后,界面没有,cadence 启动不起来
  • ¥50 comfyui下连接animatediff节点生成视频质量非常差的原因
  • ¥20 有关区间dp的问题求解
  • ¥15 多电路系统共用电源的串扰问题
  • ¥15 slam rangenet++配置