【发布时间】:2017-11-30 21:09: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 时间戳初始化多个keyDatas。但是,我还提供了初始化keyData 的无参数构造函数,将lastMod 设置为now(),因为没有提供时间戳。
我是否应该像示例代码中那样使用[[maybe_unused]] 参数标记未使用的public: keyData(){};?
研究
[[maybe_unused]]Standard attributes 网站的描述说(粗体是我的):
出现在类、typedef、变量、非静态数据成员、函数、枚举或枚举器的声明中。如果编译器对未使用的实体发出警告,则对于声明为 may_unused 的任何实体都会抑制该警告。
-
Constructors and member initializer lists 网站说(粗体是我的):
构造函数是一个类的特殊非静态成员函数,用于初始化其类类型的对象。
-
Destructors 网站说(粗体是我的):
析构函数是一个特殊成员函数,在对象的生命周期结束时调用。
-
operator overloading 网站说(粗体是我的):
重载的运算符是具有特殊函数名称的函数。
所以如果我理解得很好,*tors 是函数,作为函数它们可以标记为[[maybe_unused]],不是吗?
【问题讨论】:
-
您的代码似乎有 Java/C#-itis 的坏情况。症状包括不断需要用访问类标记每个成员声明。
-
std之前还有一个不必要的前导::。如果 anyone 声明命名空间std::chrononot 与::std::chrono相同,它们将立即被解雇。焦油和羽毛也是合适的。所以::std中的::一点用处都没有。 -
不确定that edit of yours 是什么,我希望这是一个错字,而不是破坏这个问题。以防万一,如果您希望取消与此答案的关联,我认为正确的做法是要求版主通过问题上的自定义标志来这样做。
标签: c++ attributes c++17