C++14

C++14 on ISO:n 18. elokuuta 2014 hyväksymä C++-ohjelmointikielen standardi ISO/IEC 14882:2014.[1] Standardi korvasi edellisen ISO/IEC 14882:2011 -standardin (C++11).

Standardi koostuu suurelta osin pienemmistä parannuksista ja muutoksista kuin edellinen C++11. Standardin seuraava versio on C++17.

Muutokset edellisestä

Eräitä huomioitavia muutoksia edelliseen standardiin verrattuna:[2][3]

  • anonyymit inline-funktiot (lambda-operaattorit)
  • paluutyypin automaattinen päättely (auto-tyyppi)
  • deprecated-merkintä class [[deprecated]] ongelmakohde {...};
  • binääriliteraalit (kuten: int val = 0b11110000;)
  • laajennettu vakiolauseke (constexpr) C++11-standardista[4]
  • variable templates -mallit[5]

Vakiolausekelaajennus

Vakiolauseke constexpr on laajennettu ja sallii lisää toimintoja.[6]

Ehtolauseet if ja switch on lisätty sallittuihin toimintoihin.[6]

constexpr int abs(int x) 
{
  if (x < 0)
    x = -x;
  return x;
}

Toistorakenteet for, while ja do-while on lisätty sallittuihin toimintoihin.[6]

Paluutyypin päättely

Muuttujatyypin päättely paluuarvosta:[7]

std::map<int, std::string> m;
auto it = m.find(42); // palauttaa iteraattorin, joka viittaa pariin

Päättely voidaan laajentaa koskemaan metodin paluuarvoa:[8]

string& lookup();

decltype(auto) look_up_a_string() { return lookup(); }

Metodi look_up_a_string() palauttaa string&.

Lambda-operaattorit

Anonyymeillä inline-funktioilla (lambda-operaattoreilla) on mahdollista lisätä lyhyitä metodeja:[3]

std::vector<int> v;
std::for_each(v.begin(), v.end(), [](int i) { return i+2; });

C++14 ei vaadi konkreettisia tyyppejä lambdassa vaan ne voidaan määritellä auto-tyypillä.[9][7]

auto lambda = [](auto x, auto y) {return x + y;};

Variable templates

Muuttuvatyyppisen datan käsittelyn puutteen korjaamiseen on esitelty variable templates.[3][5]

template<typename T> constexpr T pi = T(3.14159265358979323846);

Lähteet

  1. ISO/IEC 14882:2014 ISO. Viitattu 25.1.2017.
  2. The C++14 Standard: What You Need to Know Dr Dobb's.
  3. C++14 Language Extensions isocpp.org. Viitattu 6.2.2017.
  4. constexpr specifier en.cppreference.com. Viitattu 6.2.2017.
  5. Gabriel Dos Reis: Variable Templates (Revision 1) open-std.org. Viitattu 6.2.2017.
  6. Smith, Richard: Relaxing constraints on constexpr functions isocpp.org. Viitattu 8.3.2017.
  7. auto specifier en.cppreference.com. Viitattu 6.2.2017.
  8. decltype(auto) isocpp.org. Viitattu 6.2.2017.
  9. Generalized lambda captures isocpp.org. Viitattu 21.1.2018.

    Aiheesta muualla

    This article is issued from Wikipedia. The text is licensed under Creative Commons - Attribution - Sharealike. Additional terms may apply for the media files.