C++14
Megjelenés
Főnév
C++14 (tsz. C++14s)
- (informatika) A C++14 a C++ szabvány egyik inkrementális frissítése, amelyet 2014-ben fogadtak el az ISO/IEC szabványosító bizottság által. Célja az volt, hogy finomítsa, egyszerűsítse és továbbfejlessze a C++11-ben bevezetett újításokat, valamint orvosolja annak hiányosságait és gyakorlati nehézségeit.
🔹 C++14 fő céljai
- C++11 egyszerűsítése
- Jobb fejlesztői élmény (UX)
- Kisebb újítások, de sok praktikus megoldás
- Fordítási hibák csökkentése és jobb diagnosztika
🔹 Legfontosabb újítások
✅ 1. Automatikus visszatérési érték (auto) kiterjesztése
auto square(int x) {
return x * x;
}
De most már lambda kifejezésekben is használható:
auto lam = [](int x) -> int { return x + 1; }; // C++11
auto lam2 = [](int x) { return x + 1; }; // C++14: visszatérési típus automatikus
✅ 2. Generic lambdák – sablonos lambda
auto add = [](auto a, auto b) {
return a + b;
};
std::cout << add(3, 4); // int
std::cout << add(2.5, 4.1); // double
A lambda most már használhat típusfüggetlen paramétereket (auto a paraméterlistában).
✅ 3. decltype(auto)
Ez egy új kulcsszó, amellyel pontosan visszaadhatjuk egy kifejezés típusát, beleértve a referencia-típusokat is.
int x = 5;
int& y = x;
auto f1() { return y; } // f1() → int
decltype(auto) f2() { return y; } // f2() → int&
✅ 4. std::make_unique
C++11-ben csak std::unique_ptr volt, de nem volt std::make_unique.
auto ptr = std::make_unique<int>(42); // C++14-ben végre van
Ez a std::shared_ptr párja (make_shared), biztonságosabb és kényelmesebb, mint new.
✅ 5. Bináris literálok és digit separator
int bin = 0b101010; // bináris számok (C++14)
int big = 1'000'000; // könnyebb olvasni a nagy számokat
✅ 6. Kiterjesztett constexpr
C++11 constexpr csak egyetlen return utasítást engedett. C++14-ben már összetett utasításokat is:
constexpr int factorial(int n) {
int result = 1;
for (int i = 2; i <= n; ++i)
result *= i;
return result;
}
✅ 7. Variable templates
template<typename T>
constexpr T pi = T(3.1415926535897932385);
// Használat:
double x = pi<double>;
float y = pi<float>;
Ezzel értékeket is általánosíthatsz sablonként, nem csak függvényeket/osztályokat.
✅ 8. Return type deduction for normal functions
C++14-ben már nem kell kiírni a visszatérési típust (ha auto-t használsz és nincs ->):
auto sum(int a, int b) {
return a + b; // a típus dedukálva lesz
}
✅ 9. Relaxált constexpr szabályok
- Több utasítás engedélyezett
- Lokális változók használhatók
- Elágazások (
if,switch) is használhatók
🔹 Fordítók támogatása
| Fordító | C++14 támogatás |
|---|---|
| GCC 5+ | Teljes |
| Clang 3.4+ | Teljes |
| MSVC 2015+ | Teljes |
Fordításkor:
g++ -std=c++14 main.cpp
🔹 Összefoglalás
| Téma | Újdonság |
|---|---|
| Típusinferencia | decltype(auto), lambdában auto |
| Lambda fejlesztések | Generic lambda, return type dedukció |
constexpr fejlesztés |
Bonyolultabb műveletek, ciklus, elágazás |
| Új szintaxis | 0b bináris literál, ' elválasztó |
| Smart pointer | std::make_unique |