为什么C++允许未命名的函数参数?

Jam*_*sev 28 c++ parameters function

以下是完全合法的C++代码

void foo (int) {
    cout << "Yo!" << endl;
}

int main (int argc, char const *argv[]) {
    foo(5); 
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

我想知道,如果有一个值可以在函数中留下未命名的参数,因为它们不能在函数内引用它们.

为什么这个合法开始?

das*_*ght 40

是的,这是合法的.这对于不打算使用相应参数的实现中的基类实现虚拟:您必须声明参数以匹配基类中虚函数的签名,但您不打算使用它,所以你没有指定名称.

另一种常见的情况是,当您向某个库提供回调时,您必须符合该库已建立的签名(感谢Aasmund Eldhuset提出这个问题).

还有一个特殊情况用于定义自己的后增量和后减量运算符:它们必须具有带int参数的签名,但该参数始终未使用.不过,这个约定接近于语言设计的黑客攻击.

  • 值得一提的是,一些编译器可以警告未使用的参数:使它们未命名将修复警告. (7认同)
  • ...或者用作要用作回调的常规函数​​(因此必须符合给定的签名),但不需要使用该参数. (3认同)
  • @dasblinkenlight:关于后增量的好点,但也可以使用未命名参数的类型.这实际上是(ab)在STL中用于各种实现中的模板参数.这种技巧主要用于模板函数/类,因此您可以根据模板参数类型的特征更改要调用的函数. (2认同)

650*_*502 10

当然,在声明函数时,不命名参数是合法的,但它在实现中也是合法的.当函数需要声明参数具有特定的固定签名时,最后这个显然很奇怪的版本很有用,但不需要参数.

例如,这可能发生在派生类中的方法,回调函数或模板参数中.

不为参数指定名称表明不需要该参数,并且不会使用其值.一些编译器,如果您改为命名参数然后只是不使用它将发出一个警告,可能是函数体有问题.