Jaka jest różnica między C ++ 0x a C ++ 11?


82

Widzę mieszane użycie tych dwóch terminów tutaj na SO.

Wikipedia mówi

C ++ 11, wcześniej znany również jako C ++ 0x ...

ale nie wiem dlaczego.

  • Dlaczego najpierw został nazwany C ++ 0x, a potem C ++ 11?
  • Co oznacza x? Zgaduję - jak zmienna?

2
Zero oznacza, że ​​autorzy specyfikacji byli przesadnie optymistyczni (czyż programiści nie zawsze tacy są?)
Sergey Kalinichenko

2
C ++ 0x było bardzo optymistyczną nazwą. Nazwanie go DukeNukem, erm, C ++ 4ever byłoby bardziej realistyczne.
fredoverflow,

6
Nie rozumiem, jaki jest związek między zerem a optymizmem.
René Nyffenegger,

5
@ RenéNyffenegger zero reprezentuje optymizm, ponieważ ludzie myśleli, że standard zostanie ukończony w dekadzie 2000 roku i tak będzie się nazywał C ++ 08 lub C ++ 09. W rzeczywistości został ukończony dopiero w 2011 roku.
Brennan Vincent

2
Ok, teraz rozumiem. Zawsze myślałem, że 0xma na celu wprowadzenie literału szesnastkowego.
René Nyffenegger,

Odpowiedzi:


96

Standardy C ++ i C są zwykle nazwane na podstawie roku, w którym zostały opublikowane, co ułatwia ich zapamiętanie.

Na przykład w C ++ oryginalny Standard został opublikowany w 1998 roku, więc mówimy o C ++ 98, a kiedy odnosimy się do jego pierwszej poprawki, opublikowanej w 2003 roku, mówimy o C ++ 03.

Rzekomo, że następny Standard będzie gotowy na rok 2008, ale ponieważ był niepewny, nazwano go C ++ 0x, gdzie xoznaczało 8 lub 9. W praktyce jednak, jak wszyscy wiemy, planowanie zmieniło się i tak kończymy na C ++ 11.

Jednak w przypadku następnej wersji (C ++ 1x) Bjarne Stroustrup stwierdził, że zamierza to zrobić za 5 lat (czyli około 2016 r.). Na razie planowane są zmiany w podstawowym języku (koncepcje, moduły i wyrzucanie elementów bezużytecznych) i wydaje się, że nacisk kładziony jest bardziej na rozszerzenie biblioteki (na przykład systemu plików), ale jest jeszcze wcześnie, więc kto wie!


2
Było wiele rzeczy zepchniętych do następnego standardu: koncepcje, zbieranie śmieci, moduły ... (zbieranie śmieci jest prawdopodobnie najbliższe gotowości. A moduły nadal wymagają znacznej pracy.)
James Kanze

@JamesKanze: Nie słyszałem o Garbage Collection i zapomniałem o modułach (dzięki). Moduły są właściwie same w sobie dość łatwe (wiele języków już je ma), pamiętam Douga Gregora mówiącego, że prawdziwym problemem było połączenie modułów i rzeczywistego systemu nagłówkowego w spójną całość, tak że nie trzeba czekać na zależności migrować, zanim to zrobisz. Doug ciężko pracował nad integracją modułów w Clang, ale wydaje się, że trochę polerował lambdy dla CLang 3.1.
Matthieu M.

14
wiadomość z przyszłości, mamy C ++ 14 i C ++ 17
Karolis Ryselis

29

C ++ 0x był nazwą standardu przed jego wydaniem / sfinalizowaniem. Po jego sfinalizowaniu (w roku 2011) mogliśmy go nazwać poprawnie. To znaczy C ++ 11.


3
I zgodnie z żartem Bjarne'a, że ​​„x jest szesnastkowo”, może to być również C ++ 0B. : P
Jon Purdy

@JonPurdy Pierwotnym celem było wydanie ostatecznego standardu przed 2009 rokiem. Bjarne skomentował, że x jest szesnastkowy. Stało się jasne, że nie damy rady. (Mógł to mieć na myśli ironicznie. Nie wiem.)
James Kanze

5
@JamesKanze: Cóż, tak. To żart. Standardowe komisje muszą coś zrobić, aby poprawić nastrój.
Jon Purdy

4

Ponieważ norma miała zostać opublikowana / zatwierdzona w roku 200x, ale w rzeczywistości została zatwierdzona w 2011.


4

Kiedy rozpoczęto prace nad nowym standardem, mniej więcej w 1998 roku, nikt nie wiedział, w którym roku zostanie sfinalizowany - więc „x” oznaczało nieznany rok i nadzieję, że zostanie on ukończony w ciągu mniej więcej dziesięciu lat.

Ostatecznie został sfinalizowany w 2011 roku, więc standard jest obecnie znany potocznie jako C ++ 11, a oficjalnie jako ISO / IEC 14882: 2011.

Teraz, gdy ten standard jest już oficjalny, trwają prace nad następnym; znowu nikt nie wie, kiedy to zostanie zrobione, ale mamy nadzieję, że zajmie to mniej niż dekadę, więc potocznie nazywa się to C ++ 1x.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.