在C ++ 11中弃用静态类成员

时间:2017-01-20 09:33:53

标签: c++ c++11

我遇到了不同的宏,它们允许弃用成员属性和函数,但没有一个讨论弃用静态类成员的可能性。

我读到即使在C ++ 14中,静态成员的弃用也是not allowed

这有什么具体原因吗?

1 个答案:

答案 0 :(得分:6)

让我们得到一些事实:

[[deprecated]]属性的措辞如下 (基于N4269 7.6.5 [dcl.attr.deprecated],强调我的):

  
      
  1. 该属性可以应用于类的声明,typedef-name,变量非静态数据   成员函数,命名空间,枚举,枚举器或模板专业化。
  2.   

误导性部分是“非静态数据成员”的明确外观,而在此列表中没有相同级别的对应部分,但在同一列表中还有另外两个感兴趣的元素。

  • variable的描述是(基于3 [基本]):
  
      
  1. 变量是由非静态数据成员或者非静态数据成员的引用声明引入的   宾语。变量的名称(如果有)表示引用或对象。
  2.   

这意味着说a variable包含静态数据成员

  • static member functionfunction(红色汽车是一辆汽车,这是一个合乎逻辑的结论,我似乎没有找到任何指示标准中的计数器)。< / p>

  • 没有任何语法或行为问题特别适用于静态成员,静态函数几乎是命名空间中的自由函数,静态数据成员或多或少是命名空间中的全局变量,你可以弃用自由函数和全局变量..

  • 作为奖励,它实际上适用于主要编译器。

总结所有这些事实基本上意味着[[deprecated]]属性实际上可以应用于静态数据成员,非静态数据成员和静态成员函数等。

所以为了回答你的问题,根据我的理解,标准实际上允许弃用静态成员。