Loading AI tools
Vikipedi'den, özgür ansiklopediden
C++17, C++ programlama dili için yayınlanan ISO/IEC 14882 standardının bir versiyonudur. C++17, bir önceki C++ standardı olan C++14'ün yerine geçmiş, sonrasında C++20 ile yerdeğiştirmiştir.
C++ Standard Komitesi yayın döngüsünü 3 senelik periyotlara sabitlemeden önce, C++17'nin yayın tarihinin ne olacağı belli değildi. O dönem, C++11 için C++0x veya C++1x, C++14 için C++1y denilmesi gibi, C++17 için de C++1z denilmiştir. C++17 spesifikasyonu Mart 2017'de Uluslararası Standard Taslağı (İngilizce: Draft International Standard (DIS)) aşamasına getirildi.[1][2] Bu taslak oy birliği ile onaylanmış[3] ve tamamlanan standard Aralık 2017'de basılmıştır.[4] C++ Standard Kütüphanesi'nde az sayıda değişiklik yapılmıştır, bunlar arasında <algorithm>
başlığındaki bazı algoritmalara doğrudan (explicit) parallellik desteği ve sözdizim geliştirmeleri gösterilebilir.
C++17 ile pek çok yeni özellik tanıtılmıştır. Tam olmayan bir liste aşağıda görülebilir.
static_assert
'teki text mesajı parametresi geçilmesinin isteğe bağlı hale getirilmesi[5]class
'a alternatif olarak typename
anahtar sözcüğünün kullanımına izin verilmesi [6]auto
tür çıkarımına dair yeni kurallar [7][8]namespace X { namespace Y { … } }
yerine namespace X::Y { … }
kullanılabilmesi [8][9][[fallthrough]]
, [[maybe_unused]]
, [[nodiscard]]
[12]u8
) character literals[10][13]auto
'nun template parametrelerinde tür (type) veya nesne (non-type) olarak kullanılabilmesi[16]if constexpr(expression)
[19]auto [a, b] = getTwoReturnValues();
, for(auto [k, v] : assocContainer){..};
[20]if
ve switch
ifadelerinde tanımlama yapmaya izin verilmesi[21]T
türünde bir ifadeden (expression), T
türünün nesnelerinin kopyalamayla tanımlama (copy-initialization) ve doğrudan tanımlama (direct-initialization) yoluyla yapılan tanımlama, arı-sağ değer (pure right value, prvalue) türünde bir ifadeden yapıldığında, kopyalama veya taşıma yapıcı üye fonksiyonların (copy constructor, move constructor) çağrılmamasıyla sonuçlanır. Böylece verinin kopyalanmasından kaçınılır (copy ellision).std::pair<double, bool>(5.0, false)
yerine std::pair(5.0, false)
kullanılabilir ve böylece std::make_pair(5.0, false)
gibi bir yardımcı template fonksiyon çağrısına da gerek kalmaz.[23][24]__has_include
önişlemci direktifini kullanarak bir başlık dosyasının ulaşılabilir olup olmadığına karar verilebilmesi[25]__cplusplus
'ın değerinin 201703L
olarak değiştirilmesi[26]std::string_view
[31]std::optional
std::any
std::uncaught_exception
fonksiyonuyla yerdeğiştirmek üzere std::uncaught_exceptions
[10][32]std::map
ve std::unordered_map
tutucuları için yeni eleman ekleme fonksiyonları: try_emplace
, insert_or_assign
[33][34]boost::filesystem
kütüphanesi baz alınarak tasarlanmış bir dosya sistemi kütüphanesi olan std::filesystem
[36]std::variant
[39]std::byte
[40]std::conjunction
, std::disjunction
ve std::negation
metafonksiyonları[41]<memory_resource>
başlığı [42]C++'ın bu revizyonunda yalnızca yeni özellikler eklenmemiş, aynı zamanda bazı kaldırılanlar da olmuştur.
std::auto_ptr
, std::random_shuffle
ve eski fonksiyon adaptörleri gibi deprecate edilmiş tür ve fonksiyonlar standard kütüphaneden kaldırıldı.[8][45] Bunların yerini C++11'nin geliştirimiş özellikleri; std::unique_ptr
, std::shuffle
, std::bind
ve lambda gibi yapılar aldı.register
anahtar sözcüğü kaldırıldı.[46] Bu anahtar sözcük hala ayrımıştır ancak artık kullanılmamaktadır.Seamless Wikipedia browsing. On steroids.
Every time you click a link to Wikipedia, Wiktionary or Wikiquote in your browser's search results, it will show the modern Wikiwand interface.
Wikiwand extension is a five stars, simple, with minimum permission required to keep your browsing private, safe and transparent.