Атрибут C++: deprecated (с C++14)
Указывает, что имя или сущность, объявленная с этим атрибутом, являются устаревшими, то есть их использование разрешено, но не рекомендуется по какой-либо причине.
Синтаксис
[[deprecated]] | (1) | |
[[deprecated( строковая_литераль )]] | (2) |
| строковая_литераль | - | невычисляемая строковая литераль, которая может быть использована для объяснения обоснования устаревания и/или для предложения замены |
Объяснение
Указывает, что использование имени или сущности, объявленной с этим атрибутом, разрешено, но не рекомендуется по какой-либо причине. Компиляторы обычно выдают предупреждения при таком использовании. строковая_литераль, если указана, обычно включается в предупреждения.
Этот атрибут разрешается в объявлениях следующих имен или сущностей:
- класс/структура/объединение:
struct [[deprecated]] S;, - имя_typedef, включая те, которые объявлены с помощью объявления_псевдонима_типа:
[[deprecated]] typedef S* PS;,using PS [[deprecated]] = S*;, - переменная, включая статический_член_данных:
[[deprecated]] int x;, - нестатический_член_данных:
union U { [[deprecated]] int n; };, - функция:
[[deprecated]] void f();, - пространство_имён:
namespace [[deprecated]] NS { int x; }, - перечисление:
enum [[deprecated]] E {};, - перечислитель:
enum { A [[deprecated]], B [[deprecated]] = 42 };, (с 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 для deprecated |
© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/w/cpp/language/attributes/deprecated