В чем разница между C ++ 0x и C ++ 11?

82

Я вижу смешанное использование этих двух терминов здесь, на SO.

Википедия говорит

C ++ 11, также ранее известный как C ++ 0x ...

но я не знаю почему.

  • Почему сначала он был назван C ++ 0x, а затем C ++ 11?
  • Кроме того, что означает x? Моя догадка - как переменная?
Лазер
источник
2
Ноль означает, что составители спецификации были излишне оптимистичны (разве программисты всегда такие?)
Сергей Калиниченко
2
C ++ 0x было очень оптимистичным названием. Было бы более реалистично назвать это DukeNukem, хм, C ++ 4ever.
fredoverflow
6
Я не понимаю, какая связь между нулем и оптимизмом.
René Nyffenegger
5
@ RenéNyffenegger ноль олицетворяет оптимизм, потому что люди думали, что стандарт будет завершен в десятилетие 2000-х и будет называться C ++ 08 или C ++ 09. На самом деле это не было закончено до 2011 года.
Бреннан Винсент
2
Хорошо, теперь я понял. Я всегда думал, что 0xэто должен был ввести шестнадцатеричный литерал.
René Nyffenegger 05

Ответы:

96

Стандарты C ++ и C обычно называют в честь года их публикации, что упрощает их запоминание.

Например, в C ++ исходный стандарт был опубликован в 1998 году, поэтому мы говорим о C ++ 98, а когда мы говорим о его первом исправлении, опубликованном в 2003 году, мы говорим о C ++ 03.

Предполагалось, что следующий Стандарт будет выпущен в 2008 году, но, поскольку это было неясно, он был назван C ++ 0x, где xвместо 8 или 9 обозначалось. Однако на практике, как мы все знаем, планирование изменилось. Итак, мы получаем C ++ 11.

Тем не менее, для следующей версии (C ++ 1x) Бьярн Страуструп заявил о своем намерении сделать это через 5 лет (примерно в 2016 году). На данный момент предусмотрены изменения в основном языке (концепции, модули и сборка мусора), и, похоже, основное внимание уделяется расширению библиотеки (например, файловой системы), но еще рано, так что кто знает!

Матье М.
источник
2
Был перенесен ряд вещей на следующий стандарт: концепции, сборка мусора, модули ... (Сборка мусора, вероятно, наиболее близка к тому, чтобы быть готовой. И модули все еще нуждаются в значительной доработке.)
Джеймс Канце
@JamesKanze: Я не слышал о сборке мусора и забыл модули (спасибо). Модули на самом деле довольно просты сами по себе (они уже есть во многих языках), я помню, как Дуг Грегор сказал, что реальная проблема заключалась в объединении модулей и фактической системы заголовков в единое целое, так что вам не нужно ждать, пока ваши зависимости будут мигрировать раньше, чем вы это сделаете. Дуг усердно работал над интеграцией модулей в Clang, но, похоже, немного поправил лямбды для CLang 3.1.
Matthieu M.
14
Послание из будущего, у нас есть C ++ 14 и C ++ 17
Каролис Рыселис
29

C ++ 0x был названием стандарта до того, как он был выпущен / завершен. Когда он был доработан (в 2011 году), мы смогли правильно назвать его. То есть C ++ 11.

Билл Линч
источник
3
И, согласно замечанию Бьярна, что «x - шестнадцатеричный», это также может быть C ++ 0B. : P
Джон Парди
@JonPurdy Первоначальной целью было выпустить окончательный стандарт до 2009 года. Бьярн сделал свой комментарий о том, что x является шестнадцатеричным, и стало ясно, что мы не собираемся этого делать. (Возможно, он имел в виду это иронично. Я не знаю.)
Джеймс Канце
5
@JamesKanze: Ну да. Это шутка. Стандартные комитеты должны что- то делать, чтобы поднять настроение.
Джон Парди
4

Поскольку стандарт планировалось выпустить / одобрить в 200x, но фактически был утвержден в 2011.

Никлас Б.
источник
4

Когда началась работа над новым стандартом, примерно в 1998 году, никто не знал, в каком году он будет завершен, поэтому «x» означал неизвестный год и надежду, что он будет завершен в течение десяти лет или около того.

В конце концов, он был доработан в 2011 году, и теперь стандарт известен как C ++ 11, а официально как ISO / IEC 14882: 2011.

Теперь, когда этот стандарт стал официальным, работа над следующим продолжается; опять же, никто не знает, когда это будет сделано, но есть надежда, что это займет меньше десяти лет, и поэтому в просторечии он известен как C ++ 1x.

Майк Сеймур
источник