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 matlab数字图像处理频率域滤波
  • ¥15 在abaqus做了二维正交切削模型,给刀具添加了超声振动条件后输出切削力为什么比普通切削增大这么多
  • ¥15 ELGamal和paillier计算效率谁快?
  • ¥15 file converter 转换格式失败 报错 Error marking filters as finished,如何解决?
  • ¥15 ubuntu系统下挂载磁盘上执行./提示权限不够
  • ¥15 Arcgis相交分析无法绘制一个或多个图形
  • ¥15 关于#r语言#的问题:差异分析前数据准备,报错Error in data[, sampleName1] : subscript out of bounds请问怎么解决呀以下是全部代码:
  • ¥15 seatunnel-web使用SQL组件时候后台报错,无法找到表格
  • ¥15 fpga自动售货机数码管(相关搜索:数字时钟)
  • ¥15 用前端向数据库插入数据,通过debug发现数据能走到后端,但是放行之后就会提示错误