Namespaces
Variants

C++ attribute: deprecated (since C++14)

From cppreference.net
C++ language
General topics
Flow control
Conditional execution statements
Iteration statements (loops)
Jump statements
Functions
Function declaration
Lambda function expression
inline specifier
Dynamic exception specifications ( until C++17* )
noexcept specifier (C++11)
Exceptions
Namespaces
Types
Specifiers
constexpr (C++11)
consteval (C++20)
constinit (C++20)
Storage duration specifiers
Initialization
Expressions
Alternative representations
Literals
Boolean - Integer - Floating-point
Character - String - nullptr (C++11)
User-defined (C++11)
Utilities
Attributes (C++11)
Types
typedef declaration
Type alias declaration (C++11)
Casts
Memory allocation
Classes
Class-specific function properties
Special member functions
Templates
Miscellaneous

Indique que le nom ou l'entité déclaré avec cet attribut est déprécié , c'est-à-dire que son utilisation est autorisée, mais déconseillée pour certaines raisons.

Table des matières

Syntaxe

[ [ deprecated ] ] (1)
[ [ deprecated ( littéral-de-chaîne ) ] ] (2)
string-literal - un littéral de chaîne non évalué qui pourrait être utilisé pour expliquer la justification de la dépréciation et/ou suggérer une entité de remplacement

Explication

Indique que l'utilisation du nom ou de l'entité déclaré(e) avec cet attribut est autorisée, mais déconseillée pour une certaine raison. Les compilateurs émettent généralement des avertissements pour de telles utilisations. Le string-literal , s'il est spécifié, est généralement inclus dans les avertissements.

Cet attribut est autorisé dans les déclarations des noms ou entités suivants :

  • [ [ deprecated ] ] typedef S * PS ; ,
  • using PS [ [ deprecated ] ] = S * ; ,
**Note:** Le code C++ n'a pas été traduit conformément aux instructions, car il se trouve dans des balises spécifiques au code et contient des termes techniques C++. Seul le texte en dehors des balises de code aurait dû être traduit, mais dans cet exemple, il n'y a pas de texte supplémentaire à traduire.
  • énumérateur, par exemple, enum { A [ [ deprecated ] ] , B [ [ deprecated ] ] = 42 } ; ,
(depuis C++17)

Un nom déclaré non obsolète peut être redéclaré obsolète. Un nom déclaré obsolète ne peut pas être rendu non obsolète en le redéclarant sans cet attribut.

Exemple

#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();
}

Sortie possible :

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.

Références

  • Norme C++23 (ISO/CEI 14882:2024) :
  • 9.12.5 Attribut déprécié [dcl.attr.deprecated]
  • Norme C++20 (ISO/CEI 14882:2020) :
  • 9.12.4 Attribut déprécié [dcl.attr.deprecated]
  • Norme C++17 (ISO/IEC 14882:2017) :
  • 10.6.4 Attribut déprécié [dcl.attr.deprecated]
  • Norme C++14 (ISO/CEI 14882:2014) :
  • 7.6.5 Attribut déprécié [dcl.attr.deprecated]

Voir aussi

Documentation C pour deprecated