繁体   English   中英

避免定义但不用于静态const类

[英]Avoid defined but not used on static const class

这似乎是一件微不足道的事情,但是我不是C ++专家,而且到目前为止,我还没有找到一个很好的解决方案。 我怀疑我缺少一些可能解决此问题的基本编码结构。 我的一个主头文件中有以下定义:

static const Foo   INVALID_FOO = {};

其中Foo是POD类(它没有构造函数,因为它在C ++ 03项目的联合中使用)。 看起来不错,除了包括标头但不使用INVALID_FOO ,我得到警告:

 error: 'Foo::INVALID_FOO' defined but not used [-Werror=unused-variable]

我尝试删除static但随后得到重复的定义。 我可以使它为前向声明,并在.c文件中定义它,但是编译器将需要通过引用访问它,并且将无法进行任何优化。 我也想-Wall编译器标志。 我想知道是否有一个很好的方法来做到这一点?

您可以像这样禁止显示GCC警告:

static const Foo INVALID_FOO __attribute__ ((unused)) = {};

请注意,这里unused是正确的,它所做的只是抑制警告(并且引用标识符仍然可以)。 还有一个used属性可以抑制警告, 告诉GCC在目标文件中发出定义,即使编译器在源代码中没有看到对它的引用-在大多数情况下,这也会导致不必要的代码膨胀。

您可以使用static_cast<void>(INVALID_FOO);移植该警告static_cast<void>(INVALID_FOO); 声明。

还要注意,全局和命名空间范围内的static const有点重言而语const使它成为static ,所以static是多余的。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM