C++ 属性: deprecated (自 C++14 起)
来自 cppreference.cn
                    
                                        
                    
                    
                                                            
                    指示用此属性声明的名称或实体已弃用,即允许使用,但由于某些原因不建议使用。
| 目录 | 
[编辑] 语法
| [[deprecated]] | (1) | ||||||||
| [[deprecated(string-literal)]] | (2) | ||||||||
| string-literal | - | 一个未求值的字符串字面量,可用于解释弃用的原因和/或建议替换实体 | 
[编辑] 说明
指示使用此属性声明的名称或实体是被允许的,但由于某些原因不鼓励使用。编译器通常对此类使用发出警告。如果指定了 string-literal,它通常会包含在警告中。
此属性允许用于以下名称或实体的声明中:
- 类/结构/联合,例如 struct [[deprecated]] S;,
- typedef-name,包括由别名声明声明的,例如,
- [[deprecated]] typedef S* PS;,
- using PS [[deprecated]] = S*;,
 
- (非成员)变量,例如 [[deprecated]] int x;,
- 静态数据成员,例如 struct S { [[deprecated]] static constexpr char CR{13}; };,
- 非静态数据成员,例如 union U { [[deprecated]] int n; };,
- 函数,例如 [[deprecated]] void f();,
- 命名空间,例如 namespace [[deprecated]] NS { int x; },
- 枚举,例如 enum [[deprecated]] E {};,
| 
 | (C++17 起) | 
- 模板特化,例如 template<> struct [[deprecated]] X<int> {};。
一个未声明为弃用的名称可以被重新声明为弃用。一个已声明为弃用的名称不能通过在没有此属性的情况下重新声明来取消弃用。
[编辑] 示例
运行此代码
#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.[编辑] 参考
- C++23 标准 (ISO/IEC 14882:2024)
- 9.12.5 弃用属性 [dcl.attr.deprecated]
 
- C++20 标准 (ISO/IEC 14882:2020)
- 9.12.4 弃用属性 [dcl.attr.deprecated]
 
- C++17 标准 (ISO/IEC 14882:2017)
- 10.6.4 弃用属性 [dcl.attr.deprecated]
 
- C++14 标准 (ISO/IEC 14882:2014)
- 7.6.5 弃用属性 [dcl.attr.deprecated]
 
[编辑] 参阅
| C 文档 for deprecated | 


