让我们了解一些事实:
[[deprecated]]
属性的措辞如下(基于N4269 7.6.5 [dcl.attr.deprecated],强调我的部分):
- 该属性可应用于类、typedef名称、变量、非静态数据成员、函数、命名空间、枚举、枚举器或模板特化的声明。
误导的部分是在这个列表中明确出现了“非静态数据成员”,但在同一级别上没有它的对应项,在该列表中还有两个其他有趣的元素。
variable
的描述如下(基于3 [basic]):这意味着说“变量”包括静态数据成员。
- 引入一个变量的方式是声明一个引用,而不是一个非静态数据成员或对象。如果有任何变量名称,则表示该引用或对象。
[[deprecated]]
属性实际上可以应用于静态数据成员、非静态数据成员和静态成员函数等内容。
foo
,当我们调用一个带有foo
作为参数的函数时,是否应该发出警告?如果我们调用foo
的成员函数呢?对我来说,发出弃用函数的警告似乎比类成员更加明确。 - user975989