Ugrás a tartalomhoz

C++17

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


Főnév

C++17 (tsz. C++17s)

  1. (informatika) A C++17 a C++ nyelv egyik szabványos verziója, amelyet az ISO 2017-ben fogadott el. Ez a verzió kompaktabb szintaxist, gyorsabb futásidőt, típusbiztonságot és fejlettebb generikus programozási lehetőségeket kínál, miközben visszafelé kompatibilis marad C++11 és C++14 szabványokkal.



🔧 Főbb újítások (átfogó)

✅ 1. Strukturált bindolás (structured bindings)

auto [x, y] = std::pair<int, int>{1, 2};

Ez lehetővé teszi, hogy std::pair, std::tuple, vagy akár struct tagjait külön névvel bontsd ki, hasonlóan a Pythonhoz vagy JavaScript-hez. Nagyon hasznos std::map iteráláskor is.



✅ 2. if constexpr – statikus ágkezelés sablonokhoz

template <typename T>
void print(T value) {
    if constexpr (std::is_integral<T>::value)
        std::cout << "egész: " << value;
    else
        std::cout << "nem egész";
}

Ez egy fordítási idejű if: ha a feltétel hamis, a blokk el sem fordul. Ez hatékonyabb és elkerüli a sablonokra jellemző rejtélyes hibákat.



✅ 3. [ [nodiscard]], [ [maybe_unused]], [ [fallthrough]] attribútumok

[[nodiscard]] int osszeg() { return 42; }
[[maybe_unused]] int a = 10;

Attribútumok, melyek figyelmeztetnek fordításkor:

  • nodiscard: a visszatérési értéket nem szabad figyelmen kívül hagyni.
  • maybe_unused: ha egy változó nincs használva, ne jelezzen a fordító.
  • fallthrough: switch-ben jelezzük a szándékos átcsorgást.



✅ 4. std::optional – érték vagy semmi

std::optional<int> keres(int id) {
    if (id == 42) return 100;
    return std::nullopt;
}

Olyan változó, amely vagy tartalmaz értéket, vagy nem. Helyettesíti a nullptr, bool vagy hibás visszatérési értékek használatát. Tökéletes hibakezeléshez.



✅ 5. std::variant és std::visit – típusbiztos unió

std::variant<int, float> v = 12.5f;
std::visit([](auto x) { std::cout << x; }, v);

A variant lehet több típus egyike (mint union, de biztonságos). A visit-tel tudjuk a benne tárolt értéket futásidőben kezelni.



✅ 6. std::any – bármilyen típus tárolása

std::any ertek = 42;
ertek = std::string("alma");

Hasonlít a void* típusra, de típusbiztos és használható typeid-dal és any_cast-tal.



✅ 7. std::string_view – olvasható karakterlánc másolás nélkül

std::string s = "almafa";
std::string_view sv = s.substr(0, 4); // "alma"

Nem másolja az adatot, csak mutatóként kezeli. Gyors, olcsó, ideális paraméterátadásra.



✅ 8. Kifejezőbb típusok sablonparaméterekhez (template<typename T, auto N>)

template<typename T, auto N>
std::array<T, N> letrehoz() {
    return std::array<T, N>{};
}

A auto-val bármilyen típusú nemtípus sablonparamétert tudsz használni – nem csak int vagy size_t.



🧪 Egyéb újdonságok:

  • std::filesystem: fájlkezelés (file_exists(), copy_file(), path)
  • std::clamp(x, min, max): érték leszorítása határok közé
  • std::size(), std::empty(), std::data(): konténer-segédfüggvények
  • inline változók: globális változók több .cpp-ben is lehetnek
  • constexpr if és constexpr lambda funkciók



🧱 Fordítás C++17-tel

Használj -std=c++17 kapcsolót:

g++ -std=c++17 main.cpp -o program

🔚 TLDR

C++17 célja, hogy:

  • könnyebbé tegye a kódolást
  • jobban támogassa a sablonprogramozást
  • gyorsabb és biztonságosabb legyen
  • modernebb C++ élményt adjon (Python/JavaScript-szerű kényelmi funkciókkal)