Skip to content

Latest commit

 

History

History
75 lines (50 loc) · 2.62 KB

File metadata and controls

75 lines (50 loc) · 2.62 KB

🌎 中文 | English

deprecated 属性

C++14 引入 [[deprecated]] 属性, 允许标记废弃的函数、类或变量, 编译时产生警告

Book Video Code X
cppreference-attribute / markdown 视频解读 练习代码

为什么引入?

  • C++11 之前没有标准方式标记废弃 API, 只能靠文档或 #warning 等非标准手段
  • [[deprecated]] 在编译期产生警告, 调用方无法忽略, 比注释或文档更有效

一、基础用法和场景

[[deprecated("Use new_api() instead")]]
void old_api() { }

[[deprecated]]
int legacy_value = 42;

void modern_code() {
    old_api();       // 编译器警告: old_api is deprecated
    int x = legacy_value;  // 编译器警告: legacy_value is deprecated
}

二、真实案例 - STL 中的 [[deprecated]]

MSVC STL 使用 [[deprecated]] 包装废弃头文件和 API 的警告宏。下面以仓库内置的 MSVC STL 为例 (源码: msvc-stl/stl/inc/yvals_core.h)

// MSVC STL · msvc-stl/stl/inc/yvals_core.h (有删节)
#define _CXX17_DEPRECATE_C_HEADER \
    [[deprecated("warning STL4004: " \
                 "<ccomplex>, <cstdalign>, <cstdbool>, and <ctgmath> " \
                 "are deprecated in C++17.")]]

STL 将 [[deprecated]] 封装成宏, 在编译期对使用废弃 C 头文件的代码产生标准警告, 用户可借此提前迁移

三、注意事项

  • 可标记: 函数、类、变量、枚举、using 别名
  • 消息字符串可选但推荐
  • 废弃不等于删除 — 编译器仍正常生成代码

四、练习代码

练习代码主题

练习代码自动检测命令

d2x checker deprecated-attribute

五、其他