C++ 属性: 已弃用 (自 C++14 起)
来自 cppreference.com
指示使用此属性声明的名称或实体已弃用,即使用是允许的,但出于某种原因不鼓励。
内容 |
[编辑] 语法
[[deprecated]]
|
(1) | ||||||||
[[deprecated( 字符串文字 )]] |
(2) | ||||||||
字符串文字 | - | 一个未评估的字符串文字,可用于解释弃用的理由和/或建议替换实体 |
[编辑] 解释
指示使用此属性声明的名称或实体是允许的,但出于某种原因不鼓励。编译器通常会在此类使用上发出警告。字符串文字(如果指定)通常包含在警告中。
此属性允许在以下名称或实体的声明中使用
- 类/结构体/联合体,例如 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 { [[已弃用]] int n; };,
- 函数,例如 [[已弃用]] void f();,
- 命名空间,例如 namespace [[已弃用]] NS { int x; },
- 枚举,例如 enum [[已弃用]] E {};,
|
(自 C++17 起) |
- 模板特化,例如 template<> struct [[已弃用]] 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 文档 针对 deprecated
|