C++17
Főnév
C++17 (tsz. C++17s)
- (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ényekinlineváltozók: globális változók több.cpp-ben is lehetnekconstexpr ifésconstexpr lambdafunkció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)