Tabla 4 (Palabras clave) en N3936 (C ++ 14):
alignas continue friend register true
alignof decltype goto reinterpret_cast try
asm default if return typedef
auto delete inline short typeid
bool do int signed typename
break double long sizeof union
case dynamic_cast mutable static unsigned
catch else namespace static_assert using
char enum new static_cast virtual
char16_t explicit noexcept struct void
char32_t export nullptr switch volatile
class extern operator template wchar_t
const false private this while
constexpr float protected thread_local
const_cast for public throw
Tabla 4 en N3337 (C ++ 11):
alignas continue friend register true
alignof decltype goto reinterpret_cast try
asm default if return typedef
auto delete inline short typeid
bool do int signed typename
break double long sizeof union
case dynamic_cast mutable static unsigned
catch else namespace static_assert using
char enum new static_cast virtual
char16_t explicit noexcept struct void
char32_t export nullptr switch volatile
class extern operator template wchar_t
const false private this while
constexpr float protected thread_local
const_cast for public throw
... que es una forma larga de decir "no".
( override
y final
son "identificadores con significado especial" y se enumeran en la Tabla 3; and
etc. son "representaciones alternativas ... para ciertos operadores y puntuadores" y se enumeran en la Tabla 5. Ninguna tabla cambió entre C ++ 11 y C ++ 14.)
register
palabra clave sigue siendo útil o se utiliza en el nuevo código C ++ 11?Estoy publicando esta respuesta con el fin de brindar herramientas para encontrar respuestas a preguntas similares.
El borrador estándar se mantiene actualmente en un repositorio público de GitHub. ¡Eso significa que puedes hacerle esta pregunta a GitHub!
La tabla de palabras clave está en el archivo
source/lex.tex
. Si le echa la culpa, podemos encontrar que el último cambio en la tabla de palabras clave tuvo lugar en agosto de 2011 (en realidad, es la primera confirmación: esa tabla no ha cambiado desde que el repositorio entró en funcionamiento alrededor de C ++ 11 estaba siendo finalizado).Alternativamente, podemos pedirle a GitHub que compare los dos borradores que se enviaron para votación para ambas versiones del estándar: N3337 y N3936. Una diferencia entre esos dos muestra que los cambios en
lex.tex
no cambiaron nada en la tabla de palabras clave.fuente
No se agregarán nuevas palabras clave con C ++ 14. Esto no es sorprendente, ya que C ++ 14 está pensado como una pequeña actualización a C ++ 11 principalmente involucrada en la limpieza de errores y la realización de pequeñas mejoras de bajo impacto. Es probable que el próximo cambio importante sea C ++ '17', donde esperaría nuevas palabras clave una vez más.
Creo que vale la pena considerar por qué el comité evita agregar nuevas palabras clave (y, de manera coincidente, por qué se equivoca al incluirlo
auto
en su lista). El principal problema con las palabras clave nuevas es que en C ++ no se puede usar una palabra clave como identificador, lo que significa que agregar una palabra clave nueva rompe el código existente. Reutilizarauto
, entonces, no rompe su regla porque ningún código existente podría usarseauto
como identificador de todos modos .Entonces, para aceptar una nueva palabra clave, debe haber una justificación que supere el costo de un posible conflicto con el código existente y no hay una forma sensata de implementar lo mismo sin una nueva palabra clave. En el caso de C ++ 11, el comité aceptó algunas propuestas que requerían nuevas palabras clave, ya que sentían que el beneficio superaba el costo, no porque no odien agregar nuevas palabras clave.
También es la razón por la que, si miras la lista que proporcionaste, cada una es una palabra clave compuesta, ya que eso reduce la posibilidad de que entren en conflicto con los identificadores existentes.
fuente