名稱空間
變體
操作

C++ 屬性: deprecated (自 C++14 起)

來自 cppreference.com
< cpp‎ | 語言‎ | 屬性
 
 
C++ 語言
 
 
屬性
(C++23)
(C++11)(直至 C++26)
deprecated
(C++14)
(C++20)
(C++17)
(C++11)
(C++20)
 

指示用此屬性宣告的名稱或實體已棄用,即允許使用,但由於某些原因不建議使用。

目錄

[編輯] 語法

[[deprecated]] (1)
[[deprecated( string-literal )]] (2)
string-literal - 一個未求值的字串字面量,可用於解釋棄用的原因和/或建議替換實體

[編輯] 說明

指示使用此屬性宣告的名稱或實體是被允許的,但由於某些原因不鼓勵使用。編譯器通常對此類使用發出警告。如果指定了 string-literal,它通常會包含在警告中。

此屬性允許用於以下名稱或實體的宣告中:

  • [[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 {};
  • 列舉器,例如 enum { A [[deprecated]], B [[deprecated]] = 42 };
(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