C++14

C++14 on ISO:n 18. elokuuta 2014 hyväksymä C++-ohjelmointikielen standardi ISO/IEC 14882:2014. 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:

Vakiolausekelaajennus

Vakiolauseke constexpr on laajennettu ja sallii lisää toimintoja.

Ehtolauseet if ja switch on lisätty sallittuihin toimintoihin.

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

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

Paluutyypin päättely

Muuttujatyypin päättely paluuarvosta:

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

Päättely voidaan laajentaa koskemaan metodin paluuarvoa:

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:

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ä.

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

Variable templates

Muuttuvatyyppisen datan käsittelyn puutteen korjaamiseen on esitelty variable templates.

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. 1 2 3 C++14 Language Extensions isocpp.org. Viitattu 6.2.2017.
  4. ↑ constexpr specifier en.cppreference.com. Viitattu 6.2.2017.
  5. 1 2 Gabriel Dos Reis: Variable Templates (Revision 1) open-std.org. Viitattu 6.2.2017.
  6. 1 2 3 Smith, Richard: Relaxing constraints on constexpr functions isocpp.org. Viitattu 8.3.2017.
  7. 1 2 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