2012-06-13 3 views
6

Я получил сообщение link, описывающее атрибут [[deprecated]] в C++ 11. Этот звук очень удобен, и я хотел бы получить дополнительную информацию об этом - какие компиляторы его поддерживают, полная документация по нему и т. Д.Где я могу найти информацию об атрибуте C++ [[устаревший]]

Я потратил около 20 минут на поиски, но кроме связанного веб-сайта, Я не мог найти информацию об этом в любом месте. Частично это осложнялось другими словами использования «устаревших» в связи с C++ 11, а поисковые системы не распознавали [[. Я не нашел этого в проектах стандартов, связанных с различными SO-ответами. У меня нет доступа к полной, оплачиваемой, стандартной.

У кого-нибудь есть дополнительная информация об этом атрибуте [[deprecated]]?

P.S .: Если вам интересно, я хотел бы использовать это в качестве лучшей альтернативы https://stackoverflow.com/a/295229/599884

ответ

13

Атрибут [[deprecated]] пробился в черновик C++ 14 (см. Раздел 7.6.5 [dcl.attr.deprecated] из the October 2013 draft).

атрибутов маркераdeprecated может быть использован для обозначения имен и объектов, использование которых по-прежнему допускается, но не рекомендуется для какой-то причине.

Например, следующая функция foo устарела:

[[deprecated]] 
void foo(int); 

можно обеспечить сообщение, которое описывает, почему имя или юридическое лицо осуждалось:

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

Сообщения должна быть строковым литералом.

+0

ссылка на проект документа было бы здорово :-) Редактировать: спасибо! – Christoph

+0

Хорошая ссылка на атрибуты (а также многие другие языки C/C++ и стандартные библиотеки) - cppreference.com. См. Http://en.cppreference.com/w/cpp/language/attributes для '[[устарело]]'. – TManhente

7

Во-первых, вещи в [[]] не ключевые слова; они являются атрибутами.

Во-вторых, нет атрибута [[deprecated]], определенного стандартом C++ 11. Ссылка, на которую вы ссылаетесь, является либо ошибкой, либо ссылкой на конкретный компилятор (возможно, C++ Builder?), Который реализует этот атрибут.

Атрибуты (обычно) являются специфическими для компилятора. Например, #pragma s, компиляторы должны игнорировать любой атрибут, который они не поддерживают.

+0

спасибо. ключевое слово чувствовал себя не так как-то, но я не был уверен, поэтому я взял ссылку «Перейти к ключевым словам» на этой странице, чтобы это означало, что это ключевое слово. исправленный. И спасибо за ответ. – Christoph

+0

@Nicol: «компиляторы должны игнорировать любой атрибут, который они не поддерживают». Это звучит логично, но где я могу найти это в стандарте, пожалуйста? Я помню, что искал его некоторое время назад, напрасно. –

+1

@Marc: §7/​​1: "* Если не указано иное, значение декларации атрибута определяется реализацией. *". §7.6.1/5: «* Для токена-атрибута, не указанного в настоящем стандарте, поведение определяется реализацией. *« Предполагается, что не требуется. : -] – ildjarn

Смежные вопросы