在未使用的类* tors

时间:2017-11-30 21:09:18

标签: c++ attributes c++17

问题

我应该对未使用的类* tors使用[[maybe_unused]] attribute吗?

示例

让我们考虑以下示例:

public: struct keyData{
    public: [[maybe_unused]] keyData(){};
    public: keyData(::std::chrono::steady_clock::time_point timestamp)
        : lastMod(timestamp)
    {};

    protected: ::std::chrono::steady_clock::time_point lastMod = ::std::chrono::steady_clock::now();
};

我想使用缓存的time_point时间戳初始化多个keyData。但是,我还提供无参数构造函数,在keyData中,将lastMod设置为now(),因为未提供时间戳。

我是否应该使用public: keyData(){};参数标记未使用的[[maybe_unused]],如示例代码中所示?

研究

Standard attributes网站的

[[maybe_unused]]说明(粗体是我的)

  

出现在类的声明,typedef,变量,非静态数据成员,函数,枚举或枚举器中。如果编译器对未使用的实体发出警告,则对于声明为maybe_unused的任何实体都会禁止该警告。

  • Constructors and member initializer lists 网站上说(粗体是我的)

      

    构造函数是一个特殊的非静态成员函数,用于初始化其类类型的对象。

  • Destructors 网站上说(粗体是我的)

      

    析构函数是特殊成员函数,在对象的生命周期结束时调用。

  • operator overloading 网站上说(粗体是我的)

      

    重载运算符是具有特殊函数名称的函数

所以,如果我理解得很好,* tors就是函数,作为函数,它们可以标记为[[maybe_unused]],不是吗?

1 个答案:

答案 0 :(得分:4)

  

我应该在未使用的类* tors上使用[[maybe_unused]]属性吗?

[[maybe_unused]]的目的是防止可能警告合格项目未被使用的编译器发出警告。您的编译器是否警告未使用的构造函数?如果是这样,那么你应该用它来抑制那个警告。

但是,由于大多数编制者都不会对废弃的功能发出警告,因此最好不要打扰。该属性只会占用空间。

除非您将图书馆宣传为-Wunused-member-function干净,否则对于所有相关人员来说,最好不要压制此警告。毕竟,想要使用该警告的用户实际上希望警告存在。不使用警告的用户不需要[[maybe_unused]]随意撒上。