Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/136.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 查询c++;迭代器标签_C++ - Fatal编程技术网

C++ 查询c++;迭代器标签

C++ 查询c++;迭代器标签,c++,C++,我正在浏览一段代码片段 template <class RAIter> void alg(RAIter, RAIter, std::random_access_iterator_tag) { std::cout << "alg() called for random-access iterator\n"; } 模板 void alg(RAIter,RAIter,std::随机访问迭代器标记) { 标准::cout 1) 为什么只提到数据类型名称而没有提到它的变量

我正在浏览一段代码片段

template <class RAIter>
void alg(RAIter, RAIter, std::random_access_iterator_tag)
{
    std::cout << "alg() called for random-access iterator\n";
}
模板
void alg(RAIter,RAIter,std::随机访问迭代器标记)
{
标准::cout
1) 为什么只提到数据类型名称而没有提到它的变量

由于未使用参数,因此不需要名称

2) 为什么它只允许用于模板化函数,而不允许用于非模板化函数


实际上,在非模板函数上也允许使用它。

事实上,这与模板无关

这是一个未命名的参数,在以下情况下完全合法:

  • 声明一个方法(因此没有正文)
  • 定义不使用该参数的方法
基本上,您可以在不使用命名参数的情况下尊重签名,例如:

float foo(float, int, float);

int main()
{
  float x = foo(10.0f, 5, 20.0f);
  return 0;
}

float foo(float a, int, float b)
{
  return a+b;
}
这在某些特定情况下很有用,可以考虑纯
virtual
方法或方法的前向声明

在特定情况下,它有助于抑制未使用参数的警告,例如:

float foo(float a, int z, float b)
{
  return a+b;
}

这会产生一个带有
-Wunused参数的警告
,但如果您明确声明您不会通过删除其名称来使用它,则不会发出警告。

任何函数都可以有未命名的参数。非模板函数不能有未命名的参数,这是从古代ANSI C之前遗留下来的,不是吗?