C++ C++;警告:使用未使用的参数进行虚拟函数重写

C++ C++;警告:使用未使用的参数进行虚拟函数重写,c++,C++,这是我在StackOverflow上发布的第一个问题。我遇到了一个C++警告要解决。问题是我们在派生类中重写了虚拟函数,而在被重写的函数体中没有使用一些函数参数。因此,编译器会不断发出警告。这是我的C++项目中具有类层次结构的一个非常常见的问题。我尝试了以下两种解决方案,两种方法都能奏效。只是想知道哪一个更金黄或者应用更广泛。或者,如果有任何其他黄金解决方案,这个问题,请随时提出建议 void f(int a) {} (WARNING) ==> void f(int a) { (void)a;

这是我在StackOverflow上发布的第一个问题。我遇到了一个C++警告要解决。问题是我们在派生类中重写了虚拟函数,而在被重写的函数体中没有使用一些函数参数。因此,编译器会不断发出警告。这是我的C++项目中具有类层次结构的一个非常常见的问题。我尝试了以下两种解决方案,两种方法都能奏效。只是想知道哪一个更金黄或者应用更广泛。或者,如果有任何其他黄金解决方案,这个问题,请随时提出建议

void f(int a) {} (WARNING) ==> void f(int a) { (void)a; } (NO WARNING) void f(int a) {} (WARNING) ==> void f(int) {} (NO WARNING) void f(inta){}(警告)==>void f(inta){(void)a;}(无警告) void f(int a){}(警告)==>void f(int){}(无警告) 提前谢谢

这三个属性(第三个是评论中提到的
[[maybe\u unused]]]
属性)都很好,选择纯粹是审美和主观的

(void)a
对我个人来说是最没有意义的,但它有着悠久的传统,而且其他一些未使用名称的情况没有像参数一样可以省略名称的选项,因此它可能是唯一的选项(在以前的语言版本中,
[[maybe_unused]]
还不存在)(第三个是评论中提到的
[[maybe_unused]]
属性)很好,选择纯粹是审美和主观的


(void)a
对我个人来说是最没有意义的,但它有着悠久的传统,而且其他一些未使用名称的情况下,没有像参数那样保留名称的选项,因此它可能是唯一的选项(在以前的语言版本中,
[[maybe_unused]]
还不存在).

第三种解决方案:
void f(inta[[maybe_unused]]){}
()@Someprogrammerdude我认为属性在声明之前。不,实际上没有“黄金法则”这只是一个个人偏好和风格的问题。例如,在创建函数时,可以不写参数名称,而不是在需要这个参数之前,这是解决这个问题的一种方式。如果C++版本支持<代码> [[也许未使用] ]我会使用它。否则我宁愿省略该参数,如果不能这样做,则
(void)
cast it。除了抑制警告的技术外,您可能还想重新审视设计。一般来说,基类根据所有派生类通用的要求指定虚拟函数。如果基类为一个或多个der不需要的虚拟函数指定一组参数ived类,这通常是一个很大的暗示,表明在设计基类时没有正确考虑某些方面。第三种解决方案:
void f(int a[[maybe_unused]]]){}
()@Someprogrammerdude我认为属性在声明之前。而且没有真正的“黄金法则”这只是一个个人偏好和风格的问题。例如,在创建函数时,可以不写参数名称,而不是在需要这个参数之前,这是解决这个问题的一种方式。如果C++版本支持<代码> [[也许未使用] ]我会使用它。否则我宁愿省略该参数,如果不能这样做,则
(void)
cast it。除了抑制警告的技术外,您可能还想重新审视设计。一般来说,基类根据所有派生类通用的要求指定虚拟函数。如果基类为一个或多个der不需要的虚拟函数指定一组参数ived类,这通常意味着在设计基类时没有正确考虑某些方面。