C++ 静态void函数中没有标识符参数的类型

C++ 静态void函数中没有标识符参数的类型,c++,syntax,C++,Syntax,前几天我看到了下面的代码,(我已经对它进行了清理,因为它不是开源的/公共的),但我不明白没有标识符的类型是如何使用的。我找不到任何东西可以清楚地描述这里发生的事情,看起来像是预声明的事情或原型化的事情,但这是实际的函数定义,有人能解释一下吗,抱歉,如果这是一个新手问题 static void myfunction(int /*comment*/) { // code here, loop that waits for a pid to exit } 函数中没有使用参数,为了避免可能出现

前几天我看到了下面的代码,(我已经对它进行了清理,因为它不是开源的/公共的),但我不明白没有标识符的类型是如何使用的。我找不到任何东西可以清楚地描述这里发生的事情,看起来像是预声明的事情或原型化的事情,但这是实际的函数定义,有人能解释一下吗,抱歉,如果这是一个新手问题

static void myfunction(int /*comment*/)
{
    // code here, loop that waits for a pid to exit
}

函数中没有使用参数,为了避免可能出现的警告,可以省略参数变量名

调用函数时传递的任何值都将被忽略


由于采用了C++17标准,您还可以使用该属性来判断函数中可能不使用参数:

static void myfunction([[maybe_unused]] int argument)
{
    // ...
}

此属性还可用于其他变量,不仅用于参数,也可用于整个函数。

该函数可能具有如下原型:

void myfunction(int parameter);
实现该函数的人不需要
参数
,因此他们将占位符保留为
int
的形式,以避免对可能出现的错误发出警告:

static void myfunction(int /*comment*/)
{
    // code here, loop that waits for a pid to exit
}

还有一种实践是人们在实现此类函数时喜欢做的——他们喜欢留下注释,指出可能的参数可能用于什么,就像在您的示例中一样。

未命名的int可以用作区分相同函数签名的占位符,一个典型的例子是重载后增量和前增量运算符:

//Define prefix increment operator
Point& Point::operator++()
{
   _x++;
   _y++;
   return *this;
}

// Define postfix increment operator.
Point Point::operator++(int)
{
   Point temp = *this;
   ++*this;
   return temp;
}

它只是一个没有名字的参数。所以是的,它不能在函数中实际使用。有时人们这样做是为了匹配函数原型(也许它们重写了一个虚拟函数,这个参数是这个参数)。这在C++标准中提到了,在<代码> [DCL,fCT.DEF.Guangy] < /Cord>第6段:[注:未使用的参数不需要命名。]这对我来说也是个新闻。顺便说一句,C不允许这样做;在C语言中,无论您是否使用参数,参数都必须有名称。感谢所有的答案,我猜是最后一个原因,因为这是一段经过多次开发的代码,最近的作者不再可以询问。没问题!“用注释指定变量名是我所知道的,这是一个相当古老的约定,所以难怪为什么最近的开发人员不能用现代C++来达到今天的效果。