C++ attribute: deprecated (since C++14)
Indica que el nombre o entidad declarado con este atributo está obsoleto , es decir, su uso está permitido, pero se desaconseja por alguna razón.
Contenidos |
Sintaxis
[
[
deprecated
]
]
|
(1) | ||||||||
[
[
deprecated
(
literal-de-cadena
)
]
]
|
(2) | ||||||||
| string-literal | - | un literal de cadena no evaluado que podría utilizarse para explicar la justificación de la deprecación y/o sugerir una entidad de reemplazo |
Explicación
Indica que el uso del nombre o entidad declarado con este atributo está permitido, pero se desaconseja por algún motivo. Los compiladores normalmente emiten advertencias sobre dichos usos. El string-literal , si se especifica, normalmente se incluye en las advertencias.
Este atributo está permitido en declaraciones de los siguientes nombres o entidades:
- class/struct/union , por ejemplo, struct [ [ deprecated ] ] S ; ,
- typedef-name , incluyendo aquellos declarados por alias declaration , por ejemplo,
-
- [ [ deprecated ] ] typedef S * PS ; ,
- using PS [ [ deprecated ] ] = S * ; ,
- (no miembro) variable, por ejemplo, [ [ deprecated ] ] int x ; ,
- miembro de datos estático , por ejemplo, struct S { [ [ deprecated ] ] static constexpr char CR { 13 } ; } ; ,
- miembro de datos no estático , por ejemplo, union U { [ [ deprecated ] ] int n ; } ; ,
- función , por ejemplo, [ [ deprecated ] ] void f ( ) ; ,
- espacio de nombres , por ejemplo, namespace [ [ deprecated ] ] NS { int x ; } ,
- enumeración , por ejemplo, enum [ [ deprecated ] ] E { } ; ,
|
(desde C++17) |
- especialización de plantilla , por ejemplo, template <> struct [ [ deprecated ] ] X < int > { } ; .
Un nombre declarado no obsoleto puede ser redeclarado como obsoleto. Un nombre declarado obsoleto no puede dejar de ser obsoleto redeclarándolo sin este atributo.
Ejemplo
#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(); }
Salida posible:
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.
Referencias
- Estándar C++23 (ISO/IEC 14882:2024):
-
- 9.12.5 Atributo obsoleto [dcl.attr.deprecated]
- Estándar C++20 (ISO/IEC 14882:2020):
-
- 9.12.4 Atributo obsoleto [dcl.attr.deprecated]
- Estándar C++17 (ISO/IEC 14882:2017):
-
- 10.6.4 Atributo obsoleto [dcl.attr.deprecated]
- Estándar C++14 (ISO/IEC 14882:2014):
-
- 7.6.5 Atributo obsoleto [dcl.attr.deprecated]
Véase también
|
Documentación de C
para
deprecated
|