Tabela 4 (palavras-chave) em 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
Tabela 4 em 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 é uma maneira prolixa de dizer "não".
( override
e final
são "identificadores com significado especial" e estão listados na Tabela 3; and
etc. são "representações alternativas ... para certos operadores e pontuadores" e estão listados na Tabela 5. Nenhuma das tabelas mudou entre C ++ 11 e C ++ 14.)
register
palavra - chave ainda é útil ou usada no novo código C ++ 11?Estou postando esta resposta com o objetivo de fornecer ferramentas para encontrar respostas para perguntas semelhantes.
O rascunho padrão atualmente é mantido em um repositório público do GitHub. Isso significa que você pode fazer essa pergunta ao próprio GitHub!
A tabela de palavras-chave está no arquivo
source/lex.tex
. Se você colocar a culpa nisso, podemos descobrir que a última mudança na tabela de palavras-chave ocorreu em agosto de 2011 (na verdade é o primeiro commit: essa tabela não mudou desde que o repo foi ao ar na época do C ++ 11 estava sendo finalizado).Como alternativa, podemos pedir ao GitHub para comparar os dois rascunhos que foram enviados para votação para as duas versões do padrão: N3337 e N3936. Uma diferença entre os dois mostra que as alterações para
lex.tex
não alteraram nada na tabela de palavras-chave.fonte
Nenhuma nova palavra-chave será adicionada com C ++ 14. Isso não é surpreendente, pois o C ++ 14 pretende ser uma pequena atualização para o C ++ 11, principalmente envolvida na limpeza de bugs e em pequenas melhorias de baixo impacto. A próxima grande mudança provavelmente será C ++ '17', onde eu esperaria novas palavras-chave mais uma vez.
Acho que vale a pena considerar por que o comitê evita adicionar novas palavras-chave (e, coincidentemente, por que você está errado em incluir
auto
em sua lista). O principal problema com as novas palavras-chave é que em C ++ você não pode usar uma palavra-chave como identificador, o que significa que adicionar uma nova palavra-chave quebra o código existente. A reaproveitamentoauto
, então, não quebra sua regra porque nenhum código existente poderia ser usadoauto
como um identificador de qualquer maneira .Portanto, para aceitar uma nova palavra-chave, é necessário haver uma justificativa que supere o custo de um conflito potencial com o código existente e nenhuma maneira sensata de implementar a mesma coisa sem uma nova palavra-chave. No caso do C ++ 11, o comitê aceitou algumas propostas que exigiam novas palavras-chave, pois eles sentiram que o benefício superava o custo, não porque não detestassem adicionar novas palavras-chave.
É também por isso que, se você olhar a lista fornecida, verá que cada uma é uma palavra-chave composta, pois isso reduz a chance de que elas entrem em conflito com os identificadores existentes.
fonte