Tekrar merhaba sevgili yazılımperver dostlarım, nihayet uzun bir aradan sonra tekrar yazabildiğim için oldukça mutluyum ve ilk yazımı da son bıraktığım yerden yapmak istedim.
Son yazılarım ile birlikte, C++ 11 ve C++ 14’e ilişkin çoğu (ama gerçekten çoğu) kabiliyetin üzerinden geçmiş olduk. Eee artık C++ 17 sularına yelken açmanın vakti geldi de geçiyor. C++ 11’den sonra çok ciddi sayıda kabiliyetin eklendiği C++ 17 ile C++ oldukça güçlendi.
Bu yazımı da aslında, C++ 14 için yaptığım gibi bir yol haritası olarak buraya bırakıp, ilgili kabiliyetleri sizler ile paylaştıkça güncelliyor olacağım (yanlarına kırmızı ile ekliyor olacağım, yeşil olanlar ilgili diğer kaynakları temsil ediyor). Şunu da fark ettim aslında bir çok konuya da, daha önceki yazılarımda değinmişim 😁.
İnşallah, sonraki yazılarım ile birlikte, C++ 17’e ilişkin de bir çok kabiliyetin üzerinden geçmek istiyorum ve bunu da yaparken yine özellikle örnekler ile bunu yapıyor olacağım. Tabi şu da var ki, sadece C++ 17 değil, C++ 20 ve yer yer C++ 23’e ilişkin de kabiliyetleri paylaşıyor olacağım ama öncelikli hedefimiz C++ 17 oluyor olacak.
İçerik
Yeni Dil Özellikleri
- fold-expressions
- class template argument deduction (Haftalık C++ 38 – Daha da Modern C++)
- auto ile tanımlanabilen template parametreleri
- Derleme zamanı if constexpr ibaresi
- inline variables (Haftalık C++ 17 – Satır arası değişkenler kod parçası ve tek tanım kuralı)
- structured bindings (Haftalık C++ – 4 Yapısal Bağlama (Structured Binding)
- if ve switch ifadeleri içerisinde ilklendirme (Haftalık C++ 3 – if/switch ilklendirme ifadeleri)
u8
character literal (Haftalık C++ 51 – u8′ ‘ karakter tanımlamaları)- Basitleştirilmiş nested namespaces
using
-declaration ile birden fazla isim tanımlanması- noexcept tip sisteminin bir parçası haline getirme
- Yeni hesaplama sıra kuralları (order of evaluation)
- Garanti edilen copy elision
- temporary materialization
- lambda capture of *this
- constexpr lambda
- Yeni attributes:(Haftalık C++ 30 – Nitelikler (attributes))
[[fallthrough]]
[[maybe_unused]]
[[nodiscard]]
- __has_include
- <any> (Haftalık C++ 18 – std::any)
- <charconv>
- <execution> (Haftalık C++ 38 – Daha da Modern C++)
- <filesystem> (Haftalık C++ 6 – Dosya Sistemi Kütüphanesi)
- <memory_resource>
- <optional> (Haftalık C++ 14 – std::optional)
- <string_view> (Haftalık C++ 23 – std::string_view)
- <variant> (Haftalık C++ 16 – std::variant)
- std::byte
Yeni Kütüphane Özellikleri
Yardımcı Tipler
- std::tuple
- std::any (Haftalık C++ 18 – std::any)
- std::optional (Haftalık C++ 14 – std::optional)
- std::variant (Haftalık C++ 16 – std::variant)
- searchers
- std::as_const
- std::not_fn
Bellek Yönetimi
- İlklendirilmemiş bellek algoritmaları
- weak_from_this
- std::pmr::memory_resource and std::polymorphic_allocator
- std::aligned_alloc
- Transparan std::owner_less
- std::shared_ptr için dizi desteği
- Açık hizalama kabiliyeti sunan tahsis fonksiyonları
Derleme Zamanı Programlama Hususları
- std::conjunction/std::disjunction/std::negation
- std::is_swappable
- is_invocable
- is_aggregate
- std::has_unique_object_representations
Algoritmalar
- std::clamp
- Paralel algoritmalar ve koşum politikaları
- std::reduce
- std::inclusive_scan
- std::exclusive_scan
- std::gcd
- std::lcm
Iteratör ve Konteynerler
- map/set extract ve map/set merge
- map/unordered_map try_emplace ve insert_or_assign
- Sürekli iteratörler (LegacyContiguousIterator)
- Üye olmayan std::size/std::empty/std::data fonksiyonları
Diğerleri
- cache line interface
- std::launder
- std::uncaught_exceptions
- std::to_chars/std::from_chars (Haftalık C++ 19 – std::from_chars/to_chars)
- std::atomic<T>::is_always_lock_free
- std::scoped_lock (Haftalık C++ 10- std::thread (III))
- std::timespec_get
- std::chrono::duration ve std::chrono::time_point için yuvarlama API’leri (Haftalık C++ 39 – std::chrono – 1 (std::chrono::duration) )
Çıkarılan Kabiliyetler
std::auto_ptr, deprecated function objects, std::random_shuffle, std::unexpected, obsolete iostreams aliases, trigraphs, register anahtar kelimesi, bool
increment, dynamic exception specification
Çıkarılacak (“Deprecated”) Kabiliyetler
std::iterator, std::raw_storage_iterator, std::get_temporary_buffer, std::is_literal_type, std::result_of, <codecvt> başlık dosyası