C++ attribute: deprecated (since C++14)
Gibt an, dass der mit diesem Attribut deklarierte Name oder die Entität veraltet ist, das heißt, die Verwendung ist erlaubt, aber aus bestimmten Gründen nicht empfohlen.
Inhaltsverzeichnis |
Syntax
[
[
deprecated
]
]
|
(1) | ||||||||
[
[
deprecated
(
Zeichenkettenliteral
)
]
]
|
(2) | ||||||||
| string-literal | - | ein unevaluated string literal , der verwendet werden könnte, um die Begründung für die Veraltung zu erläutern und/oder eine Ersatzentität vorzuschlagen |
Erklärung
Gibt an, dass die Verwendung des Namens oder der Entität, die mit diesem Attribut deklariert wurde, erlaubt ist, aber aus bestimmten Gründen nicht empfohlen wird. Compiler geben typischerweise Warnungen bei solchen Verwendungen aus. Der string-literal , falls angegeben, wird normalerweise in die Warnungen eingeschlossen.
Dieses Attribut ist in Deklarationen der folgenden Namen oder Entitäten zulässig:
- Klasse/Struct/Union , z.B., struct [ [ deprecated ] ] S ; ,
- Typedef-Name , einschließlich derer, die durch Alias-Deklaration deklariert wurden, z.B.,
-
- [ [ deprecated ] ] typedef S * PS ; ,
- using PS [ [ deprecated ] ] = S * ; ,
- (Nicht-Mitglied-) Variable, z.B., [ [ deprecated ] ] int x ; ,
- statisches Datenelement , z.B., struct S { [ [ deprecated ] ] static constexpr char CR { 13 } ; } ; ,
- nicht-statisches Datenelement , z.B., union U { [ [ deprecated ] ] int n ; } ; ,
- Funktion , z.B., [ [ deprecated ] ] void f ( ) ; ,
- Namensraum , z.B., namespace [ [ deprecated ] ] NS { int x ; } ,
- Enumeration , z.B., enum [ [ deprecated ] ] E { } ; ,
|
(seit C++17) |
- Template-Spezialisierung , z.B., template <> struct [ [ deprecated ] ] X < int > { } ; .
Ein als nicht veraltet deklarierter Name kann erneut als veraltet deklariert werden. Ein als veraltet deklarierter Name kann nicht durch erneute Deklaration ohne dieses Attribut als nicht veraltet deklariert werden.
Beispiel
#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(); }
Mögliche Ausgabe:
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.
Referenzen
- C++23-Standard (ISO/IEC 14882:2024):
-
- 9.12.5 Veraltetes Attribut [dcl.attr.deprecated]
- C++20-Standard (ISO/IEC 14882:2020):
-
- 9.12.4 Veraltetes Attribut [dcl.attr.deprecated]
- C++17-Standard (ISO/IEC 14882:2017):
-
- 10.6.4 Veraltetes Attribut [dcl.attr.deprecated]
- C++14-Standard (ISO/IEC 14882:2014):
-
- 7.6.5 Veraltetes Attribut [dcl.attr.deprecated]
Siehe auch
|
C-Dokumentation
für
deprecated
|