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++来达到今天的效果。