Ugrás a tartalomhoz

C++14

A Wikiszótárból, a nyitott szótárból


Főnév

C++14 (tsz. C++14s)

  1. (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

  1. C++11 egyszerűsítése
  2. Jobb fejlesztői élmény (UX)
  3. Kisebb újítások, de sok praktikus megoldás
  4. 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