Таблица 4 (Ключевые слова) в 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
Таблица 4 в 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
... это длинный способ сказать "нет".
( override
и final
являются «идентификаторами со специальным значением» и перечислены в таблице 3; and
и т. д. являются «альтернативными представлениями ... для определенных операторов и знаков препинания» и перечислены в таблице 5. Ни одна из таблиц не изменилась между C ++ 11 и C ++ 14.)
register
ключевое слово еще полезно или использовать в новом C ++ 11 кода?Я публикую этот ответ, чтобы дать инструменты для поиска ответов на похожие вопросы.
Стандартный черновик в настоящее время хранится в общедоступном репозитории GitHub. Это означает, что вы можете задать этот вопрос самому GitHub!
Таблица ключевых слов находится в файле
source/lex.tex
. Если вы виноваты в этом, мы можем обнаружить, что последнее изменение в таблице ключевых слов произошло еще в августе 2011 года (на самом деле это первая фиксация: эта таблица не изменилась с тех пор, как репо было запущено примерно в то время, когда C ++ 11 дорабатывалась).В качестве альтернативы мы можем попросить GitHub сравнить два проекта, которые были отправлены на голосование для обеих версий стандарта: N3337 и N3936. Различия между этими двумя показывает , что изменения
lex.tex
не меняла ничего в таблице ключевых слов.источник
В C ++ 14 новые ключевые слова добавляться не будут. Это неудивительно, поскольку C ++ 14 задуман как небольшое обновление до C ++ 11, в основном связанное с устранением ошибок и внесением небольших улучшений с низким уровнем воздействия. Следующим крупным изменением, вероятно, будет C ++ '17', где я снова ожидал бы новых ключевых слов.
Я думаю, что стоит подумать, почему комитет уклоняется от добавления новых ключевых слов (и, кстати, почему вы ошиблись при включении
auto
в свой список). Основная проблема с новыми ключевыми словами заключается в том, что в C ++ вы не можете использовать ключевое слово в качестве идентификатора, а это означает, что добавление нового ключевого слова нарушает существующий код. Таким образомauto
, перепрофилирование не нарушает их правила, потому что ни один существующий кодauto
в любом случае не может использоваться в качестве идентификатора .Итак, чтобы принять новое ключевое слово, должно быть обоснование, которое перевешивает стоимость потенциального столкновения с существующим кодом, и нет разумного способа реализовать то же самое без нового ключевого слова. В случае C ++ 11 комитет принял несколько предложений, требующих новых ключевых слов, поскольку они чувствовали, что выгода перевешивает затраты не потому, что они не ненавидят добавлять новые ключевые слова.
Вот почему, если вы посмотрите на список, который вы дали, каждое из них является составным ключевым словом, поскольку это снижает вероятность их столкновения с существующими идентификаторами.
источник