У чому різниця між C ++ 0x та C ++ 11?


82

Я бачу неоднозначне використання цих двох термінів тут на SO.

Вікіпедія каже

C ++ 11, також раніше відомий як C ++ 0x ...

але я не впевнений, чому.

  • Чому його спочатку називали C ++ 0x, а потім C ++ 11?
  • Крім того, що означає x? Моє припущення - як змінна?

2
Нуль означає, що автори специфікації були надмірно оптимістичними (хіба програмісти не завжди такими?)
Сергій Калініченко

2
C ++ 0x - дуже оптимістична назва. Називаючи це DukeNukem, erm, C ++ 4, це було б більш реалістично.
fredoverflow

6
Я не розумію, який зв’язок між нулем та оптимізмом.
René Nyffenegger

5
@ RenéNyffenegger нуль представляє оптимізм, тому що люди думали, що стандарт буде закінчений у десятилітті 2000-х років, і тому його називатимуть C ++ 08 або C ++ 09. Насправді це було закінчено лише в 2011 році.
Бреннан Вінсент,

2
Гаразд, я зрозумів зараз. Я завжди думав, що 0xце означає ввести шістнадцятковий літерал.
René Nyffenegger

Відповіді:


96

Стандарти С ++ та С зазвичай називаються за роком публікації, що полегшує запам'ятовування.

Наприклад, в 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" шістнадцяткове "Bjarne", це також може бути C ++ 0B. : P
Джон Перді

@JonPurdy Первісною метою був випуск остаточного стандарту до 2009 року. Бьярн висловив свій коментар щодо того, що х є шістнадцятковою, і стало зрозуміло, що ми не збираємося це робити. (Він, можливо, мав на увазі це іронічно. Я не знаю.)
Джеймс Канце,

5
@JamesKanze: Ну, так. Це жарт. Стандартні комітети повинні щось робити, щоб полегшити настрій.
Джон Перді

4

Оскільки стандарт планувалося випустити / затвердити у 200x, але насправді був затверджений у 2011.


4

Коли в 1998 році чи близько того розпочалась робота над новим стандартом, ніхто не знав, в якому році він буде доопрацьований, - тому "х" означало невідомий рік і надію, що він буде доопрацьований приблизно через десять років.

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

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

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.