gpt4 book ai didi

C++ 函数模板 : Must use & for argument type and return type?

转载 作者:行者123 更新时间:2023-11-27 22:42:48 25 4
gpt4 key购买 nike

我正在学习使用函数模板。我发现如果我将参数类型声明为引用,程序就会运行。但是如果参数类型不是引用,我会得到错误。例如:

以下代码打印出正确的结果并且没有错误。

#include <iostream>
using namespace std;

template <typename T>
T & max (T & a, T & b){
return a>b?a:b;
}

int main(int argc, char const *argv[])
{
cout << max(1,2) << endl;
return 0;
}

但是如果我去掉代码中所有的“&”,即把上面的程序改成如下:

#include <iostream>
using namespace std;

template <typename T>
T max (T a, T b){
return a>b?a:b;
}

int main(int argc, char const *argv[])
{
cout << max(1,2) << endl;
return 0;
}

这段代码会导致下面的错误。

a.cpp: In function ‘int main(int, const char**)’:
a.cpp:11:17: error: call of overloaded ‘max(int, int)’ is ambiguous
cout << max(1,2) << endl;
^
a.cpp:5:4: note: candidate: T max(T, T) [with T = int]
T max (T a, T b){
^~~
In file included from /usr/include/c++/7/bits/char_traits.h:39:0,
from /usr/include/c++/7/ios:40,
from /usr/include/c++/7/ostream:38,
from /usr/include/c++/7/iostream:39,
from a.cpp:1:
/usr/include/c++/7/bits/stl_algobase.h:219:5: note: candidate: constexpr const _Tp& std::max(const _Tp&, const _Tp&) [with _Tp = int]
max(const _Tp& __a, const _Tp& __b)

为什么?谢谢大家帮助我!

最佳答案

std 命名空间中已经定义了具有相同(或兼容)名称和参数类型的函数(模板)。

移除

using namespace std;

并在 cout 和 endl 前加上 std::

std::cout << max(1,2) << std::endl;

否则,您已经用 std 命名空间中的所有名称污染了您的全局命名空间。

关于C++ 函数模板 : Must use & for argument type and return type?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47108708/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com