C++11
C++11, (ent. "C++0x"), on ISO:n 12.8.2011 hyväksymä C++-ohjelmointikielen standardi ISO/IEC 14882:2011. Standardi korvasi aiemmat ISO/IEC 14882:1998 (C++98) ja ISO/IEC 14882:2003 (C++03) standardiversiot.
Nimessä esiintyvä 11 tulee yleisen nimeämiskäytännön mukaisesti standardin julkaisuvuodesta. C++0x-tunnusta käytettiin työskentelyvaiheessa, koska valmistumisvuodesta ei ollut varmuutta, mutta sen uskottiin valmistuvan ennen vuotta 2010.
Standardin on korvannut C++14 standardi ISO/IEC 14882:2014, joka hyväksyttiin 18. elokuuta 2014.
C++11 lisäsi itse kieleen useita ominaisuuksia sekä laajentaa C++:n standardikirjastoa STL:a. Standardikirjaston laajennos käsittää suurimman osan aikaisemmasta C++ Technical Report 1:stä (TR1).
Uusi standardi laajentaa varsinaista kieltä sekä sen standardikirjastoa.
Pääsuuntaviivat uutta versiota suunniteltaessa olivat:
Aloittelijoiden huomioon ottaminen koettiin tärkeäksi, koska ohjelmoijista suurin osa tulee aina olemaan aloittelijoita, ja koska suurin osa heistä tuskin koskaan tulee perehtymään C++:aan syvällisemmin.
Kieleen on lisätty tyyppiturvallinen codice_1 määrittely.
Vanha codice_2 -makro usein käsitellään codice_3-tyyppinä eikä osoittimena. Vanhempi tapa voi hämmentää ajonaikaista tyyppimekanismia kutsumaan väärää metodia.
Käyttöesimerkki:
Vakiolauseke (codice_4) määrittää, että lauseke on mahdollista arvioida käännösaikana.
Esimerkki:
Käyttö olettaa että parametrina annettavat arvot ovat käännösaikana tunnettuja literaaleja. C++14 laajentaa vakiolausekkeen määrittelyä.
Olioiden alustamista on yhdenmukaistettu muutoksilla määrittelyyn.
Esimerkiksi kolmen alkion vektorin alustaminen arvoilla:
Anonyyminen vektorin alustaminen ja välittäminen funktiolle:
Perinteisten C-kielen toistorakenteiden vaihtoehdoksi on lisätty automatisoitu vaihtoehto. Uudempi menetelmä vähentää tyypillisen koodin toistuvaa kirjoittamista.
Tietorakenteissa olevien arvojen käsittelyä voidaan yksinkertaistaa seuraavasti:
Delegoiva konstruktori vähentää ohjelmakoodin toistoa useiden konstruktorien yhteydessä.
Standardi lisää standardikirjastoon atomisuuden toiminnot.
Esimerkki käyttötapauksesta:
Ohjelmointikielen käyttämä tekninen toteutustapa voi riippua käytetystä suorittimesta.
Monisäikeistykselle on lisätty alustariippumatonta tukea määrittelyyn. Näin ollen ohjelmakoodin siirtäminen helpottuu vähemmillä muutoksilla.
Standardikirjastossa on codice_5 säikeiden luomiseen ja käsittelyyn. Parametrina tälle annetaan funktio-objekti (osoite säikeen suorituksen alkupaikkaan).
Lisäksi codice_6 avainsanalla voi määritellä säiekohtaisia muuttujia.
Synkronointitukea on atomisien operaatioiden lisäksi käytettävissä luokilla codice_7 ja codice_8.
Synkronointiin on myös aikarajoitettu codice_9 sekä rekursion salliva codice_10 ja näiden yhdistelmä codice_11.
Tuple on template-pohjainen vaihtoehto C-kielen codice_12-tyypille.
Vastaava tietotyyppi on aiemmin esiintynyt esimerkiksi rinnakkaisohjelmointiiin kehitetyssä Alef -kielessä.
Standardikirjastoon on lisätty älyosoittimia eri tarkoituksiin:
Tyypillisen "copy-delete" menettelyn sijaan on mahdollista käyttää tehokkaampaa siirto-operaattoria ():
Menetelmä välttää nk. "deep-copy" toiminnon, joka voi olla raskas käytössä.