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ä
[muokkaa | muokkaa wikitekstiä]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
[muokkaa | muokkaa wikitekstiä]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
[muokkaa | muokkaa wikitekstiä]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
[muokkaa | muokkaa wikitekstiä]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
[muokkaa | muokkaa wikitekstiä]Muuttuvatyyppisen datan käsittelyn puutteen korjaamiseen on esitelty variable templates.[3][5]
template<typename T> constexpr T pi = T(3.14159265358979323846);
Lähteet
[muokkaa | muokkaa wikitekstiä]- ↑ ISO/IEC 14882:2014 ISO. Viitattu 25.1.2017.
- ↑ The C++14 Standard: What You Need to Know Dr Dobb's.
- ↑ a b c C++14 Language Extensions isocpp.org. Viitattu 6.2.2017.
- ↑ constexpr specifier en.cppreference.com. Viitattu 6.2.2017.
- ↑ a b Gabriel Dos Reis: Variable Templates (Revision 1) open-std.org. Viitattu 6.2.2017.
- ↑ a b c Smith, Richard: Relaxing constraints on constexpr functions isocpp.org. Viitattu 8.3.2017.
- ↑ a b auto specifier en.cppreference.com. Viitattu 6.2.2017.
- ↑ decltype(auto) isocpp.org. Viitattu 6.2.2017.
- ↑ Generalized lambda captures isocpp.org. Viitattu 21.1.2018.
Aiheesta muualla
[muokkaa | muokkaa wikitekstiä]- Taulukko ominaisuuksien kääntäjätuen tilanteesta (englanniksi)