2012-06-13 21 views
6

Recibí un link que describía un atributo [[deprecated]] en C++ 11. Este sonido muy conveniente, y me gustaría tener más información al respecto - el cual compiladores apoyarlo, documentación completa sobre el mismo, etc.Dónde puedo encontrar información sobre el atributo C++ [[obsoleto]]

Pasé 20 minutos más o menos alrededor de google, pero aparte del sitio web vinculado, No pude encontrar información sobre este en cualquier parte. En parte, esto se complicó con otros usos de la palabra "en desuso" en relación con C++ 11, y los motores de búsqueda que no reconocen [[. No encontré esto en borradores de estándares vinculados en varias respuestas SO, tampoco. No tengo acceso al estándar completo, pago.

¿Alguien tiene más información sobre este atributo [[deprecated]]?

P.S .: Si tienes curiosidad, me gustaría usar esto como una mejor alternativa a https://stackoverflow.com/a/295229/599884

Respuesta

13

El atributo [[deprecated]] ha llegado al borrador de C++ 14 (consulte la sección 7.6.5 [dcl.attr.deprecated] de the October 2013 draft).

El atributo tokendeprecated se puede utilizar para marcar los nombres y entidades cuyo uso todavía está permitido, pero se desanima por alguna razón.

Por ejemplo, la función foo siguiente es obsoleto:

[[deprecated]] 
void foo(int); 

Es posible proporcionar un mensaje que describa por qué el nombre o entidad está desfasado:

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

el mensaje debe ser una cadena literal.

+0

un enlace al borrador del documento sería genial :-) editar: ¡gracias! – Christoph

+0

Una buena referencia acerca de los atributos (así como muchas otras características del lenguaje C/C++ y las bibliotecas estándar) es cppreference.com. Consulte http://en.cppreference.com/w/cpp/language/attributes para '[[deprecated]]'. – TManhente

7

En primer lugar, las cosas en [[]] no son palabras clave; ellos son atributos.

En segundo lugar, no existe el atributo [[deprecated]] definido por el estándar C++ 11. El enlace al que se refiere es un error o se refiere a un compilador específico (¿C++ Builder, quizás?) Que implementa este atributo.

Los atributos son (normalmente) específicos del compilador. Al igual que #pragma s, se supone que los compiladores ignoran cualquier atributo que no admitan.

+0

gracias. la palabra clave se sentía mal de alguna manera, pero no estaba seguro, así que tomé el enlace "Subir a las palabras clave" en esa página para indicar que es una palabra clave. corregido Y gracias por la respuesta. – Christoph

+0

@Nicol: "se supone que los compiladores ignoran cualquier atributo que no admitan". Eso suena lógico, pero ¿dónde lo encuentro en el estándar, por favor? Recuerdo que lo busqué hace un tiempo, en vano. –

+1

@Marc: §7/​​1: "* Salvo que se especifique lo contrario, el significado de una declaración de atributo está definido por la implementación. *". §7.6.1/5: "* Para un token de atributo no especificado en esta norma internacional, el comportamiento está definido por la implementación. *" Supuesto a, no requerido para. : -] – ildjarn

Cuestiones relacionadas