C++ 用“引用”表示重叠功能;使用名称空间std";
我很清楚这样做的陷阱。例如:C++ 用“引用”表示重叠功能;使用名称空间std";,c++,C++,我很清楚这样做的陷阱。例如: #include <iostream> #include <tuple> using namespace std; //a simple function that returns the index of max and max value of a parameter pack template <typename...T> tuple<int, int> max(T... args) { const i
#include <iostream>
#include <tuple>
using namespace std;
//a simple function that returns the index of max and max value of a parameter pack
template <typename...T>
tuple<int, int> max(T... args)
{
const int size = sizeof...(args);
int list[size] = {args...};
int max_i = 0;
int max = list[0];
for (int i = 1; i < size; i++)
{
if (list[i] > max)
{
max_i = i;
max = list[i];
}
}
return std::tuple<int, int>{max_i, max};
}
int main()
{
int a ,b;
tie(a, b) = max(10, 20, 30);
return 0;
}
#包括
#包括
使用名称空间std;
//一个简单函数,返回参数包的max和max值的索引
模板
元组最大值(T…args)
{
常量int size=sizeof…(args);
int list[size]={args…};
int max_i=0;
int max=列表[0];
对于(int i=1;i最大值)
{
max_i=i;
max=列表[i];
}
}
返回std::tuple{max_i,max};
}
int main()
{
INTA,b;
领带(a,b)=最大(10,20,30);
返回0;
}
My函数的优先级低于
std::max
,并产生错误。我想知道,在使用名称空间std声明时,是否有方法仍然引用我的max
函数代码>。您无需提醒我不要声明它。您可以使用范围解析操作符调用特定的max
重载,以确保执行限定名称查找而不是非限定名称查找:
::max(10, 20, 30);
在这种情况下,过载解析将考虑您自己的<>代码> max > /Cult>函数重载,作为一个更好的生存函数,而不是在<代码> STD命名空间中的超载。从[强调我的]:
命名空间成员
[……]
命名空间N
范围内的限定查找首先考虑
位于N
中的所有声明以及
位于N
的内联命名空间成员中(并且,可以传递,
在其内联命名空间成员中)。如果文件中没有声明
该集合然后考虑由指定的所有名称空间中的声明
使用N
和所有可传递的内联命名空间中的指令
N
的成员。[……]
我需要提醒你不要申报,因为你已经申报了。@eerorika这是哪里记录的?那是因为C吗?我想是的。但事实证明C没有max
。它具有fmax
。因此,声明::max
是可以的。我仍然主张在实际项目中声明名称空间中的所有内容。@eerorika我想,否则,标准的相关部分将适用?@dfri是的,还有/4。