C++ 属性: deprecated (C++14 以降)
From cppreference.com
< cpp | language | attributes
この属性で宣言された名前またはエンティティが非推奨であることを示します。つまり、使用は許可されていますが、何らかの理由で推奨されません。
目次 |
[編集] 構文
[[deprecated]]
|
(1) | ||||||||
[[deprecated( 文字列リテラル )]] |
(2) | ||||||||
| 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 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]
[編集] 関連項目
| deprecated のC ドキュメント
|