我遇到了不同的宏,它们允许弃用成员属性和函数,但没有一个讨论弃用静态类成员的可能性.
我读到即使在C++ 14中也不允许弃用静态成员.
这有什么具体原因吗?
让我们得到一些事实:
该[[deprecated]]
属性的措辞如下(基于N4269 7.6.5 [dcl.attr.deprecated],强调我的):
该属性可以应用于类的声明,typedef-name,变量,非静态数据成员,函数,命名空间,枚举,枚举器或模板特化.
误导性部分是"非静态数据成员"的明确外观,而没有该列表中同一级别的对应部分,但在同一列表中还有另外两个感兴趣的元素.
a的描述variable
是(基于3 [基本]):
通过声明除非静态数据成员或对象之外的引用引入变量.变量的名称(如果有)表示引用或对象.
这意味着a variable
包括静态数据成员
A static member function
是一个function
(红色汽车是一辆汽车,这是一个合乎逻辑的结论,我似乎没有找到任何计数器在标准中指出这一点).
没有任何语法或行为问题特别适用于静态成员,静态函数几乎是命名空间中的自由函数,静态数据成员或多或少是命名空间中的全局变量,您可以弃用自由函数和全局变量..
作为奖励,它实际上适用于主要编译器.
总结所有这些事实基本上意味着该[[deprecated]]
属性实际上可以应用于静态数据成员,非静态数据成员和静态成员函数等.
所以为了回答你的问题,根据我的理解,标准实际上允许弃用静态成员.