A C99-ben bevezetett long long int típust most már a C++ is fogja támogatni. A szabvány szerint legalább 64 biten ábrázolódik.
A C++ bevezet egy új felsorolási típust is. Az eddigi felsorolási típus ugyanis valójában egész szám volt. Ez a C++03-ban kezdett megváltozni: azóta az enum típusok nem implicit konvertálódnak egymás között, illetve egészre. Nem definiálja a szabvány azt az egész típust sem, amelyen a felsorolási típusok ábrázolódtak, a méretük a fordítótól függ. Nem lehetett továbbá egy névtérben két olyan felsorolási típus, amelyek azonos nevű értéket tartalmaznak, ugyanis az értékek nevei a típust tartalmazó névtérbe kerülnek.
A készülő szabvány szerint a tároláshoz használt egész típus megadható (alapértelmezett az int) és saját névterük van:
A kompatibilitás megtartása miatt az enum kulcsszó továbbra is használható, valamint a definiált nevek a tartalmazó névtérbe is bekerülnek, de saját névtér is tartozik hozzá. Itt is megadható a tárolási típus.
Mivel az enum tárolási mérete a benne lévő adatoktól függ, nem volt forward deklarálható. Mivel most már megadható (illetve az enum class esetében ismert), lehetővé válik a forward deklarációjuk:
A szabványos C++ az explicit kulcsszót használja annak jelölésére, hogy egy konstruktor nem használható implicit konverzióra. Az új szabvány megengedi, hogy a kulcsszót konverziós operátorokon is használjuk.
A régi C++ implicit és explicit konstruktorok használatára nyújt lehetőséget.
Azonban nem a konstruktor az egyetlen lehetőség a konverzióra. Ha nincs lehetőségünk megváltoztatni egy osztályt, akkor definiálhatunk egy konverziós operátort egy másik osztályból. Például:
Sajnálatos módon nincs explicit konverziós operátor. Ezt a hiányosságot a C++0x kijavítja, és megengedi, hogy a konverziós operátorok explicitek legyenek. Például:
Az új C++ bevezeti a konstans kifejezés típusokat is a constexpr kulcsszóval. Ezzel a kulcsszóval jelölhetjük, ha egy függvényünk fordítási időben kiszámítható. Ez használható többek között tömbök definiálásakor (a tömb méretének fordítási időben ismertnek kell lennie C++-ban):
1972-ben a C-ben a 0 konstansnak két jelentése volt, egyrészt jelentette a 0 számot, másrészt a null pointert. A 0 kettős jelentését úgy kezelték, hogy bevezették a NULL szimbólumot, amelyet az előfeldolgozó oldott fel, általában a ((void *)0) kifejezésre. Ez azonban C++ tervezésekor problémákat okozott, hiszen a void * mutatók nem implicit konvertálódnak más mutató típusokra, így a C++-ban ismét a 0 szimbólumot kellett használni null pointerként (tehát a NULL is erre helyettesítődött). Azonban nem oldódott meg minden probléma.
Ekkor a foo(NULL) kifejezés a foo(int) függvényt hívja, ami megtévesztő, és egyértelműen nem a programozó szándékát fejezi ki.
Az új C++ szabvány bevezeti a nullptr kulcsszót a null pointer jelölésére. A nullptr típusa olyan, hogy tetszőleges mutató típusra implicit konvertálódik, valamint tetszőleges mutatóval összehasonlítható, nem konvertálódik azonban egész típusokra.
A C++-ban részeredmények tárolása sokszor nehézkes, hiszen bonyolult típusok fordulhatnak elő benne, főleg a szabványos könyvtárt nagyrészt alkotó template-k esetén. A pontos típus a felhasználó számára sokszor nehezen határozható meg. Az auto kulcsszót használva a típust a fordító kikövetkezteti. A következő két sor ugyan azt csinálja:
Hasonló módon a decltype kulcsszóval kikövetkeztethetjük kifejezések típusait, és ezt a típust felhasználhatjuk deklarációban: