C++ 属性:deprecated (C++14 起)
< cpp | language | attributes
指示声明有此属性的名字或实体被弃用,即允许但因故不鼓励使用。
语法
[[deprecated ]]
|
(1) | ||||||||
[[deprecated( 字符字面量 )]]
|
(2) | ||||||||
字符字面量 | - | 能用于解释弃用的理由并/或提议代替用实体的文本 |
解释
指示允许使用声明有此属性的名称或实体,但因故不鼓励使用。编译器通常会对其使用情况发出警告。若指定了 字符字面量,则它通常被包含于警告中。
下列名字或实体的声明中允许使用这个属性:
- class/struct/union:struct [[deprecated]] S;,
- typedef 名,也包括别名声明:[[deprecated]] typedef S* PS;、using PS [[deprecated]] = S*;,
- 变量,包括静态数据成员:[[deprecated]] int x;,
- 非静态数据成员:union U { [[deprecated]] int n; };,
- 函数:[[deprecated]] void f();,
- 命名空间:namespace [[deprecated]] NS { int x; },
- 枚举:enum [[deprecated]] E {};,
- 枚举项:enum { A [[deprecated]], B [[deprecated]] = 42 };,
- 模板特化:template<> struct [[deprecated]] X<int> {};。
声明时未弃用的名字可被重声明为 deprecated
。声明为 deprecated
的名字不能通过重声明它而不带此属性变为未弃用。
示例
运行此代码
#include <iostream> [[deprecated]] void TriassicPeriod() { std::clog << "Triassic Period: [251.9 - 208.5] million years ago.\n"; } [[deprecated("Use NeogenePeriod() instead.")]] void JurassicPeriod() { std::clog << "Jurassic Period: [201.3 - 152.1] million years ago.\n"; } [[deprecated("Use calcSomethingDifferently(int).")]] int calcSomething(int x) { return x * 2; } int main() { TriassicPeriod(); JurassicPeriod(); }
可能的输出:
Triassic Period: [251.9 - 208.5] million years ago. Jurassic Period: [201.3 - 152.1] million years ago. main.cpp:20:5: warning: 'TriassicPeriod' is deprecated [-Wdeprecated-declarations] TriassicPeriod(); ^ main.cpp:3:3: note: 'TriassicPeriod' has been explicitly marked deprecated here [[deprecated]] ^ main.cpp:21:5: warning: 'JurassicPeriod' is deprecated: Use NeogenePeriod() instead [-Wdeprecated-declarations] JurassicPeriod(); ^ main.cpp:8:3: note: 'JurassicPeriod' has been explicitly marked deprecated here [[deprecated("Use NeogenePeriod() instead")]] ^ 2 warnings generated.