名前空間
変種
操作

C++ 属性: deprecated (C++14 以降)

From cppreference.com
< cpp‎ | language‎ | attributes
 
 
C++言語
全般
フロー制御
条件実行文
if
繰り返し文 (ループ)
for
範囲for (C++11)
ジャンプ文
関数
関数宣言
ラムダ式
inline指定子
動的例外仕様 (C++17まで*)
noexcept指定子 (C++11)
例外
名前空間
指定子
const/volatile
decltype (C++11)
auto (C++11)
constexpr (C++11)
consteval (C++20)
constinit (C++20)
記憶域期間指定子
初期化
代替表現
リテラル
ブーリアン - 整数 - 浮動小数点数
文字 - 文字列 - nullptr (C++11)
ユーザー定義 (C++11)
ユーティリティ
属性 (C++11)
typedef宣言
型エイリアス宣言 (C++11)
キャスト
メモリ確保
クラス
クラス固有の関数プロパティ
explicit (C++11)
static

特殊メンバ関数
テンプレート
その他
 
 
属性
(C++23)
(C++11)(C++26 まで)
deprecated
(C++14)
(C++20)
(C++17)
(C++11)
(C++20)
 

この属性で宣言された名前またはエンティティが非推奨であることを示します。つまり、使用は許可されていますが、何らかの理由で推奨されません。

目次

[編集] 構文

[[deprecated]] (1)
[[deprecated( 文字列リテラル )]] (2)
string-literal - 非推奨の理由を説明したり、代替エンティティを提案したりするために使用できる評価されない文字列リテラル

[編集] 説明

この属性で宣言された名前またはエンティティの使用は許可されていますが、何らかの理由で推奨されないことを示します。コンパイラは通常、そのような使用に対して警告を発します。文字列リテラルが指定されている場合、通常は警告に含まれます。

この属性は、次の名前またはエンティティの宣言で許可されます。

  • [[deprecated]] typedef S* PS;,
  • using PS [[deprecated]] = S*;,
  • 列挙子、例: enum { A [[deprecated]], B [[deprecated]] = 42 };
(C++17以降)

非推奨でないと宣言された名前は、非推奨として再宣言できます。非推奨と宣言された名前は、この属性なしで再宣言しても非推奨解除できません。

[編集]

#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 standard (ISO/IEC 14882:2020)
  • 9.12.4 非推奨属性 [dcl.attr.deprecated]
  • C++17 standard (ISO/IEC 14882:2017)
  • 10.6.4 非推奨属性 [dcl.attr.deprecated]
  • C++14 standard (ISO/IEC 14882:2014)
  • 7.6.5 非推奨属性 [dcl.attr.deprecated]

[編集] 関連項目

deprecatedC ドキュメント
English 日本語 中文(简体) 中文(繁體)