deprecated
構文
<entity declaration> [[deprecated]]
または、
<entity declaration> [[deprecated("message")]]
説明
deprecated 属性を使用すると、ユーザー定義の構文要素に非推奨のフラグを立てることができます。 非推奨の構文要素は古い形式のもので、より適切な代替要素に置き換えることができます。もう使用されないことになっており、今後サポートされなくなる可能性もあります。
非推奨の構文要素が見つかったら、W8111: 非推奨のエンティティ %s にアクセスしている (C++) という警告が送出されます。 この警告は、非推奨型の変数など、あらゆる種類の非推奨エンティティについて送出されます。
2 番目の構文を用いると、ユーザーが警告中にメッセージを出力できるようになります。 メッセージでは、代わりに使用したほうがよい新しい構文要素を勧めるのが普通です。
メモ: deprecated 属性は、C++ 検査ではサポートされていません。 代わりに、定義済みマクロ _DEPRECATED_ATTRIBUTE0 と _DEPRECATED_ATTRIBUTE1 を検討してください。
警告メッセージは、非推奨に定められているエンティティがコード内で使用された場合に発せられ、そうでなければ、ありません。
deprecated 属性をサポートしている構文要素は以下のとおりです。
列挙型
enum myEnum [[deprecated]] { e0, e1, e2 };
myEnum e = e1; //W8111 Accessing deprecated entity 'myEnum'
グローバル関数/変数
int x [[deprecated]];
void myFunc(int, int) [[deprecated("use myFunc(int,double) instead")]] {
}
void myFunc(int, double){
}
//...
myFunc(3,3); //W8111 Accessing deprecated entity 'myFunc(int,int)' use myFunc(int,double) instead
クラス/構造体
class A [[deprecated]] {
} a0; //Warning
struct B [[deprecated]] {
} b0; //Warning
class C : A{
}
//...
C c0; //W8111 Accessing deprecated entity 'A'
メモ: クラス/構造体がアクセスされると(上記の例では、クラス/構造体がインスタンス化されると)、警告が送出されます。 非推奨の上位クラスからも警告が出力されます。
メソッドおよびフィールド
class A{
public:
int m_x [[deprecated]];
int m_y [[deprecated]];
A(int x, double y){}
A(int x, int y) [[deprecated("use the A(int,double) constructor")]]{} //W8111 Accessing deprecated entity 'A::A(int,int)' use the A(int,double) constructor
} a0(5,6);
//...
A a1(5,1.0);//No warning
a1.m_x=5; //W8111 Accessing deprecated entity 'A::m_x'
メモ: 上記の場合、警告にはメンバ名より先にクラス名が出力されます。
テンプレート クラス
template <class T> class A {
public:
template <class T> class B [[deprecated]] {};
};
//...
A<int>::B<double> a0; //W8111 Accessing deprecated entity 'A<int>::B<double>'
メモ: Delphi コンポーネントのコンパイル時、ユニットが C++ に変換される(.hpp ファイルが生成される)とき、非推奨フラグの付いた構文要素が元のユニットにある場合、それらには、.hpp ファイルでも非推奨のマークが付けられます。
例
SysUtils.hpp において:
class PASCALIMPLEMENTATION EStackOverflow [[deprecated]] : public EExternal
移植性
' | POSIX | Win32 | Win64 | ANSI C | ANSI C++ |
---|---|---|---|---|---|
非推奨 |
+ |
メモ: deprecated 属性は、Clang 拡張 C++ コンパイラによってサポートされていません。C++11 属性の回避策(Clang 拡張 C++ コンパイラ)