2012-06-13 20 views
6

Zostałem wysłany link opisujący atrybut [[deprecated]] w C++ 11. Brzmi to całkiem wygodnie i chciałbym mieć więcej informacji na ten temat - które kompilatory go obsługują, pełną dokumentację itp.Gdzie mogę znaleźć informacje na temat C++ [[przestarzałe]] atrybut

Spędziłem 20 minut lub więcej, ale oprócz połączonej strony internetowej, Nie mogłem znaleźć informacji na temat tego w dowolnym miejscu. Częściowo było to skomplikowane przez inne użycie słowa "przestarzałe" w związku z C++ 11, a wyszukiwarki nie rozpoznające [[. Nie znalazłem tego również w projektach standardów powiązanych z różnymi odpowiedziami SO. Nie mam dostępu do pełnego, płatnego standardu.

Czy ktoś ma więcej informacji na temat tego atrybutu [[deprecated]]?

P.S .: Jeśli jesteś ciekawy, użyję tego jako lepszą alternatywę dla https://stackoverflow.com/a/295229/599884

Odpowiedz

13

Atrybut został wprowadzony do wersji C++ 14 (patrz sekcja 7.6.5 [dcl.attr.deprecated] z the October 2013 draft).

atrybut-żetondeprecated może być używany do oznaczenia nazw i podmiotów, których stosowanie jest nadal dozwolone, ale nie jest zalecane z jakiegoś powodu.

Na przykład poniższa funkcja foo jest przestarzała:

[[deprecated]] 
void foo(int); 

Możliwe jest dostarczenie komunikat opisujący dlaczego nazwa lub jednostka została zaniechana:

[[deprecated("Replaced by bar, which has an improved interface")]] 
void foo(int); 

wiadomość musi być literałem ciąg.

+0

łącze do wersji roboczej dokumentu byłoby świetnie :-) edytuj: dzięki! – Christoph

+0

Miłym odniesieniem do atrybutów (a także wielu innych funkcji języka C/C++ i standardowych bibliotek) jest cppreference.com. Zobacz http://pl.cppreference.com/w/cpp/language/attributes dla '[[przestarzałe]]'. – TManhente

7

pierwsze rzeczy w [[]] nie są to słowa kluczowe; są atrybutami.

Po drugie, nie ma atrybutu [[deprecated]] zdefiniowanego przez standard C++ 11. Link, do którego się odnosisz jest błędny lub odnoszący się do konkretnego kompilatora (C++ Builder, być może?), Który implementuje ten atrybut.

Atrybuty są (zwykle) specyficzne dla kompilatora. Podobnie jak #pragma s, kompilatory powinny ignorować dowolny atrybut, który nie obsługuje.

+0

dzięki. słowo kluczowe wydawało się nie tak jakoś, ale nie byłem pewien, więc wziąłem link "Przejdź do słów kluczowych" na tej stronie, co oznacza, że ​​jest to słowo kluczowe. poprawione. I dzięki za odpowiedź. – Christoph

+0

@Nicol: "kompilatory powinny ignorować dowolny atrybut, który nie obsługuje". Brzmi logicznie, ale gdzie mogę to znaleźć w standardzie? Pamiętam, że szukałem go jakiś czas temu, na próżno. –

+1

@Marc: §7/​​1: "* O ile nie podano inaczej, znaczenie deklaracji atrybutu jest zdefiniowane przez implementację. *". §7.6.1/5: "* Dla atrybutu-atrybutu nie wymienionego w niniejszym standardzie międzynarodowym zachowanie jest zdefiniowane przez implementację. *" Przypuszczalne, niewymagane. : -] – ildjarn

Powiązane problemy