{"id":2624,"date":"2022-07-22T20:52:43","date_gmt":"2022-07-22T20:52:43","guid":{"rendered":"https:\/\/www.yazilimperver.com\/?p=2624"},"modified":"2022-07-22T20:52:43","modified_gmt":"2022-07-22T20:52:43","slug":"haftalik-c-50-rakam-ayiraclar-stdexchange-stdinteger_sequence-stdquoted","status":"publish","type":"post","link":"https:\/\/www.yazilimperver.com\/index.php\/2022\/07\/22\/haftalik-c-50-rakam-ayiraclar-stdexchange-stdinteger_sequence-stdquoted\/","title":{"rendered":"Haftal\u0131k C++ 50 &#8211; Rakam ay\u0131ra\u00e7lar, std::exchange, std::integer_sequence, std::quoted"},"content":{"rendered":"<p>B\u00fct\u00fcn takip\u00e7ilerimin ge\u00e7mi\u015f bayram\u0131n\u0131 kutluyorum. Yaz d\u00f6neminin gelmesi ile birlikte yaz\u0131lar\u0131m\u0131n s\u0131kl\u0131\u011f\u0131n\u0131n azald\u0131\u011f\u0131n\u0131n fark\u0131nday\u0131m, fakat aray\u0131 da \u00e7ok a\u00e7mama niyetindeyim.<br \/>\nAyr\u0131ca, uzun s\u00fcreli takip\u00e7ilerimin ho\u015funa gidecek bir iki geli\u015fme daha var ki onlar\u0131 da yaz\u0131m\u0131n sonuna sakl\u0131yorum \ud83d\ude09<\/p>\n<p>\u015eimdilik, C++ 14&#8217;e ili\u015fkin kalan son bir ka\u00e7 kabiliyete k\u0131saca de\u011finip, C++ 17 ve 20&#8217;de kalan kabiliyetlere devam edebiliriz. Neler kald\u0131 peki? Hemen ilki ile ba\u015flayal\u0131m.<\/p>\n<h2><strong><span style=\"color: #0000ff;\">Rakam Ay\u0131ra\u00e7lar\u0131 (&#8220;Digit Seperators&#8221;)<\/span><\/strong><\/h2>\n<p>Kabiliyetin isminden de anla\u015f\u0131laca\u011f\u0131 gibi, sunulan temel kabiliyet, say\u0131lar\u0131 ifade ederken art\u0131k ay\u0131ra\u00e7 (&#8216;) kullanabilmemiz.<\/p>\n<p>Peki neden buna ihtiyac\u0131m\u0131z var ya da ihtiyac\u0131m\u0131z var m\u0131 diye sorabilirsiniz? E\u011fer, k\u00fc\u00e7\u00fck say\u0131lar ile u\u011fra\u015f\u0131yorsan\u0131z ya da hi\u00e7 say\u0131larla i\u015finiz olmuyorsa, evet pek bir anlam ifade etmeyebilir ama ger\u00e7ek hayatta faturalar ya da farkl\u0131 mecralarda kullan\u0131lan say\u0131larda da, bu ay\u0131ra\u00e7lar\u0131n kullan\u0131m\u0131n\u0131 g\u00f6rebilirsiniz ve bu ay\u0131ra\u00e7lar\u0131n okunabili\u011fi nas\u0131l artt\u0131rd\u0131\u011f\u0131n\u0131 siz de fark edebilirsiniz.<\/p>\n<p>Tabi, C++ programlama dilinde ne yaz\u0131k ki b\u00f6yle bir kabiliyet bulunmamaktayd\u0131, ta ki C++ 14&#8217;e kadar. C++ 14 ile birlikte, say\u0131lar\u0131 ifade ederken art\u0131k ay\u0131ra\u00e7 (&#8216;) kullanabilece\u011fiz. Hemen bir \u00f6rne\u011fe bakal\u0131m:<\/p>\n<pre class=\"lang:c++ decode:true\">#include &lt;iostream&gt;\r\n#include &lt;cstdint&gt;\r\nusing namespace std;\r\n \r\nint main() {\r\n    int64_t a = 20'00'000;\r\n \r\n    \/\/ Burada \u00e7\u0131kt\u0131 2000000 olacak\r\n    cout &lt;&lt; a;\r\n\r\n    int64_t b = 2000'000;\r\n \r\n    \/\/ Burada da \u00e7\u0131kt\u0131 2000000 olacak\r\n    cout &lt;&lt; b;\r\n \r\n    int64_t c = 20'0'0'000;\r\n \r\n    \/\/ Burada da \u00e7\u0131kt\u0131 2000000 olacak. Nas\u0131l yani?\r\n    cout &lt;&lt; c;\r\n\r\n    return 0;\r\n}<\/pre>\n<p>yukar\u0131daki kullan\u0131mdan da anla\u015f\u0131laca\u011f\u0131 \u00fczere asl\u0131nda eklenen ayra\u00e7lar sadece okunabilirli\u011fe y\u00f6nelik, say\u0131sal anlamda hi\u00e7bir \u015fey de\u011fi\u015ftirmiyor ki, asl\u0131nda, \u00f6nemli olan da okunabilirlik. Yerleri ya da adetlerinin de \u00f6nemi yok. Bununla birlikte, kullan\u0131c\u0131 tan\u0131ml\u0131 sabitlerin tan\u0131mlanmas\u0131nda da kullan\u0131labiliyorlarm\u0131\u015f. Daha farkl\u0131 bir bak\u0131\u015f a\u00e7\u0131s\u0131 i\u00e7in kaynaklar k\u0131sm\u0131na bir video ekliyorum.<\/p>\n<h2><span style=\"color: #0000ff;\"><strong>std::exchange<\/strong><\/span><\/h2>\n<p>Bir di\u011fer C++ 14 kabiliyeti, STL k\u00fct\u00fcphanesi ile sunulan bir API olan <em>std::exchange<\/em> fonksiyonu. Bunu kullanabilmek i\u00e7in de &lt;utility&gt; ba\u015fl\u0131k dosyas\u0131n\u0131 eklemeniz gerekiyor.<\/p>\n<p>Her ne kadar ismi ve anlam\u0131, <em>std::swap<\/em>&#8216;i hat\u0131rlatsa da asl\u0131nda pek ayn\u0131 de\u011filler (hatta hi\u00e7). Peki ne yapar bu karde\u015fimiz, k\u0131saca, sunulan de\u011feri yenisi ile g\u00fcncelleyip, eski de\u011feri de d\u00f6nen bir API olarak d\u00fc\u015f\u00fcnmeniz daha do\u011fru olacakt\u0131r. Hemen bir \u00f6rne\u011fe bakal\u0131m:<\/p>\n<pre class=\"lang:c++ decode:true\">int a = std::exchange(b, c); \/\/ b eski, c yeni<\/pre>\n<p>Yukar\u0131daki ifade ile, b de\u011fi\u015fkenine c de\u011fi\u015fkeninin de\u011feri atanmakta ve a de\u011fi\u015fkenine de b&#8217;nin ba\u015fta sahip oldu\u011fu de\u011fer atanmaktad\u0131r. <em>std::swap<\/em>&#8216;ten farkl\u0131 olarak, \u00f6ncelikle, c de\u011fi\u015fkeninin i\u00e7eri\u011fi de\u011fi\u015fmemekte, ayr\u0131ca b&#8217;nin eski de\u011feri de d\u00f6n\u00fclmekte.<\/p>\n<p>Ha, b\u00fct\u00fcn bunlar\u0131 ben std::swap ya da kendim de yapamaz m\u0131yd\u0131m? Elbette, yapard\u0131n\u0131z, ba\u015fl\u0131k dosyas\u0131n\u0131n isminden de anla\u015f\u0131laca\u011f\u0131 \u00fczere sizlere bir kolayl\u0131k sa\u011flamas\u0131 ad\u0131na bunlar sunulmu\u015ftur.<\/p>\n<p>Daha detayl\u0131 tart\u0131\u015fma ve bilgilendirmeler i\u00e7in stackoverflow&#8217;daki <span style=\"color: #008000;\"><strong><a style=\"color: #008000;\" href=\"https:\/\/stackoverflow.com\/questions\/20807938\/stdswap-vs-stdexchange-vs-swap-operator\">\u015fu ba\u011flant\u0131ya<\/a> <\/strong><\/span>g\u00f6z atabilirsiniz.<\/p>\n<p>Ayr\u0131ca Jason Turner&#8217;\u0131n da <span style=\"color: #008000;\"><strong><a style=\"color: #008000;\" href=\"https:\/\/www.youtube.com\/watch?v=GEbPRS81py4\">https:\/\/www.youtube.com\/watch?v=GEbPRS81py4<\/a> <\/strong><\/span>videosu faydal\u0131 olabilir.<\/p>\n<h2><span style=\"color: #0000ff;\"><strong>std::integer_sequence, <b>index_sequence,<\/b> <b>make_integer_sequence, make_index_sequence<\/b><\/strong><\/span><\/h2>\n<p>C++ 14 &#8216;le sunulan ve \u00f6zellikle &#8220;template metaprogramming&#8221; ile u\u011fra\u015fanlar\u0131n i\u015fine yaracak bir kabiliyet de, <em>std::integer_sequence<\/em>.<\/p>\n<p>Bu s\u0131n\u0131f \u015fablonu sayesinde, verilen tipte, ki isminde de anla\u015f\u0131laca\u011f\u0131 \u00fczere bunun tam say\u0131 olmas\u0131 laz\u0131m, bir de\u011fer dizisini daha kolay ifade edebilece\u011fiz. Tabi, burada al\u0131\u015fageldi\u011fimiz dizilerden ziyade, derleme zaman\u0131nda kullanabilece\u011fimiz bir kabiliyet oldu\u011funu tekrar ifade etmek istiyorum.<\/p>\n<p>Di\u011fer yard\u0131mc\u0131 tan\u0131mlamalar da asl\u0131nda <em>std::integer_sequence<\/em>&#8216;\u0131 kullanmakta:<\/p>\n<table class=\"t-dcl-begin\">\n<tbody>\n<tr class=\"t-dcl\">\n<td class=\"t-dcl-nopad\">\n<div><span class=\"mw-geshi cpp source-cpp\"><span class=\"kw1\">template<\/span><span class=\"sy1\">&lt;<\/span><a href=\"http:\/\/en.cppreference.com\/w\/cpp\/types\/size_t\"><span class=\"kw106\">std::<span class=\"me2\">size_t<\/span><\/span><\/a>&#8230;\u00a0<span class=\"me1\">Ints<\/span><span class=\"sy1\">&gt;<\/span><br \/>\n<span class=\"kw1\">using<\/span>\u00a0index_sequence\u00a0<span class=\"sy1\">=<\/span>\u00a0std<span class=\"sy4\">::<\/span><span class=\"me2\">integer_sequence<\/span><span class=\"sy1\">&lt;<\/span><a href=\"http:\/\/en.cppreference.com\/w\/cpp\/types\/size_t\"><span class=\"kw106\">std::<span class=\"me2\">size_t<\/span><\/span><\/a>, Ints&#8230;<span class=\"sy1\">&gt;<\/span><span class=\"sy4\">;<\/span><\/span><\/div>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<table class=\"t-dcl-begin\">\n<tbody>\n<tr class=\"t-dcl\">\n<td class=\"t-dcl-nopad\">\n<div><span class=\"mw-geshi cpp source-cpp\"><span class=\"kw1\">template<\/span><span class=\"sy1\">&lt;<\/span><span class=\"kw1\">class<\/span>\u00a0T, T N<span class=\"sy1\">&gt;<\/span><br \/>\n<span class=\"kw1\">using<\/span>\u00a0make_integer_sequence\u00a0<span class=\"sy1\">=<\/span>\u00a0std<span class=\"sy4\">::<\/span><span class=\"me2\">integer_sequence<\/span><span class=\"sy1\">&lt;<\/span>T,\u00a0<span class=\"coMULTI\">\/* a sequence 0, 1, 2, &#8230;, N-1 *\/<\/span>\u00a0<span class=\"sy1\">&gt;<\/span><span class=\"sy4\">;<\/span><\/span><\/div>\n<\/td>\n<td class=\"t-dcl-nopad\"><\/td>\n<td class=\"t-dcl-nopad\"><\/td>\n<\/tr>\n<tr class=\"t-dcl\">\n<td class=\"t-dcl-nopad\">\n<div><span class=\"mw-geshi cpp source-cpp\"><span class=\"kw1\">template<\/span><span class=\"sy1\">&lt;<\/span><a href=\"http:\/\/en.cppreference.com\/w\/cpp\/types\/size_t\"><span class=\"kw106\">std::<span class=\"me2\">size_t<\/span><\/span><\/a>\u00a0N<span class=\"sy1\">&gt;<\/span><br \/>\n<span class=\"kw1\">using<\/span>\u00a0make_index_sequence\u00a0<span class=\"sy1\">=<\/span>\u00a0std<span class=\"sy4\">::<\/span><span class=\"me2\">make_integer_sequence<\/span><span class=\"sy1\">&lt;<\/span><a href=\"http:\/\/en.cppreference.com\/w\/cpp\/types\/size_t\"><span class=\"kw106\">std::<span class=\"me2\">size_t<\/span><\/span><\/a>, N<span class=\"sy1\">&gt;<\/span><span class=\"sy4\">;<\/span><\/span><\/div>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>Kabiliyetin \u00e7ok derinliklerine inmeden, basit bir \u00f6rnek kod ile bu kabiliyeti de i\u015flemi\u015f olal\u0131m:<\/p>\n<pre class=\"lang:c++ decode:true\">#include &lt;iostream&gt;\r\n#include &lt;utility&gt;\r\n\r\ntemplate &lt;typename T&gt;\r\nconstexpr T Add(T first) {\r\n    return first;\r\n}\r\n\r\n\/\/ Asagidaki iki tan\u0131mlama icin c++ 11 gerekli (variadic template)\r\ntemplate &lt;typename T, typename ... Args&gt;\r\nconstexpr T Add(T car, Args... cdr) {\r\n    return car + Add(cdr...);\r\n}\r\n\r\ntemplate &lt;int ... Args&gt;\r\nconstexpr int TotalSum() {\r\n    return Add(Args...);\r\n}\r\n\r\ntemplate&lt;int... Args&gt;\r\n\/\/ std::integer_sequence icin c++ 14 ve utility baslik dosyasi gerekli\r\nconstexpr int TotalSum(std::integer_sequence&lt;int, Args...&gt;) {\r\n    return TotalSum&lt;Args...&gt;();\r\n}\r\n\r\nint main(int argc, char** argv) {\r\n    \/\/ C++ 11 ile asagidaki iki sat\u0131r da derlenebiliyor\r\n    constexpr int sum1 = Add&lt;int&gt;(0, 1, 2, 3);\r\n    constexpr int sum2 = TotalSum&lt;0, 1, 2, 3&gt;();\r\n   \r\n    \/\/ C++ 14 ile art\u0131k a\u015fa\u011f\u0131daki de mumk\u00fcn\r\n    constexpr int sum3 = TotalSum(std::make_integer_sequence&lt;int, 4&gt; {});\r\n\r\n    std::cout &lt;&lt; \"Sum 1: \" &lt;&lt; sum1 &lt;&lt; \"\\n\"\r\n              &lt;&lt; \"Sum 2: \" &lt;&lt; sum2 &lt;&lt; \"\\n\"\r\n              &lt;&lt; \"Sum 3: \" &lt;&lt; sum3 &lt;&lt; \"\\n\";\r\n    \r\n    \/\/ C++ 14 ile mumk\u00fcn\r\n    auto integerSequenceType = std::make_integer_sequence&lt;int, 4&gt;();\r\n    std::cout &lt;&lt; \"Tip bilgisi: \" &lt;&lt; typeid(integerSequenceType).name() &lt;&lt;  \"\\n\";\r\n    std::cout &lt;&lt; \"Sekanstaki eleman adeti: \" &lt;&lt; integerSequenceType.size() &lt;&lt;  \"\\n\";\r\n\r\n    return 0;\r\n}<\/pre>\n<p><em>name<\/em> ve <em>size\u00a0<\/em>API&#8217;leri de olu\u015fturulan dizinin tip ismi ve eleman adeti g\u00f6stermek i\u00e7in kullan\u0131lmaktad\u0131r.<\/p>\n<p>A\u00e7\u0131k\u00e7as\u0131, ben \u015fu ana kadar ki geli\u015ftirme faaliyetlerimde buna direk ihtiya\u00e7 duymad\u0131m ama sizlerin olabilir, <span style=\"color: #008000;\"><strong><a style=\"color: #008000;\" href=\"https:\/\/www.open-std.org\/jtc1\/sc22\/wg21\/docs\/papers\/2013\/n3658.html\">\u00f6neri sayfas\u0131nda<\/a><\/strong><\/span>, daha detayl\u0131 motivasyon ve \u00f6rnek kullan\u0131m mevcut.<\/p>\n<h2><span style=\"color: #0000ff;\"><strong>std::quoted<\/strong><\/span><\/h2>\n<p>Gelelim yaz\u0131m\u0131z\u0131n son konu\u011fu olan <em>std::quoted<\/em> API&#8217;sine. \u00d6ncelikle bu API&#8217;yi kullanabilmeniz i\u00e7in &lt;iomanip&gt; ba\u015fl\u0131k dosyas\u0131n\u0131 eklemeniz gerekiyor. Peki bu fonksiyon bize ne sa\u011fl\u0131yor?<\/p>\n<p>Temelde, \u00e7ift t\u0131rnak veya benzeri i\u015faretler ile ifade edilen metinleri kolay bir \u015fekilde okumak ya da olu\u015fturman\u0131za yard\u0131mc\u0131 oluyor. Bu tarz \u00e7ift t\u0131rnakl\u0131 metinler daha \u00e7ok CSV ve XML dosyalar\u0131nda (ve dahi ba\u015fka yerlerde) \u00e7ok bulunmakta. Bu kabiliyet ile bu tarz metinleri kolay bir \u015fekilde okuyabiliyorsunuz. \u00d6rne\u011fe ge\u00e7meden \u015funu da ifade etmekte fayda var, her ne kadar varsay\u0131lan olarak \u00e7ift t\u0131rnak kullan\u0131lsa da, farkl\u0131 ve birden fazla da ay\u0131ra\u00e7 kullan\u0131labilmekte. \u015eimdi, kullan\u0131m\u0131n\u0131 daha net ortaya koyaca\u011f\u0131n\u0131 d\u00fc\u015f\u00fcnd\u00fc\u011f\u00fcm bir \u00f6rne\u011fe bakal\u0131m:<\/p>\n<pre class=\"lang:c++ decode:true\">#include &lt;iomanip&gt;\r\n#include &lt;iostream&gt;\r\n\r\nusing namespace std;\r\n\r\nint main(int argc, char const *argv[]) {\r\n    cout &lt;&lt; quoted(\"Merhaba d\u00fcnya.\") &lt;&lt; '\\n';\r\n    cout &lt;&lt; quoted(\"Merhaba d\u00fcnya.\", '%') &lt;&lt; '\\n';\r\n    cout &lt;&lt; quoted(\"100% Merhaba d\u00fcnya..\", '%') &lt;&lt; '\\n';\r\n    cout &lt;&lt; quoted(\"100% Merhaba d\u00fcnya..\", '%', '+') &lt;&lt; '\\n';\r\n    cout &lt;&lt; '\\n';\r\n\r\n    \/\/ Yukar\u0131daki sat\u0131rlar\u0131n \u00e7\u0131kt\u0131lar\u0131 a\u015fa\u011f\u0131daki gibi olur:\r\n    \/\/ \"Merhaba d\u00fcnya.\"\r\n    \/\/ %Merhaba d\u00fcnya.%\r\n    \/\/ %100\\% Merhaba d\u00fcnya..%\r\n    \/\/ %100+% Merhaba d\u00fcnya..%\r\n\r\n    string str1, str2, str3, str4, str5;\r\n\t\r\n    \/\/ \"Merhaba Dunya\" girelim, \u00e7ift t\u0131rnaklar ile ;) \r\n    cin &gt;&gt; quoted(str1); \r\n    cout &lt;&lt; str1 &lt;&lt; '\\n';\r\n\t\r\n    \/\/ \"Merhaba \\\"Dunya\\\"\" girelim, \u00e7ift t\u0131rnaklar ile ;) \r\n    cin &gt;&gt; quoted(str2); \r\n    cout &lt;&lt; str2 &lt;&lt; '\\n';\r\n\t\r\n    \/\/ #Merhaba Dunya# girelim, bu sefer # ile ;) \r\n    cin &gt;&gt; quoted(str3, '#'); \r\n    cout &lt;&lt; str3 &lt;&lt; '\\n';\r\n\t\r\n    \/\/ Birden fazla ay\u0131ra\u00e7 da girebiliyoruz \r\n    \/\/ #Merhaba \"Dunya\"# girelim, bu sefer # ile ;) \r\n    cin &gt;&gt; quoted(str4, '#', '\"'); \r\n    cout &lt;&lt; str4 &lt;&lt; '\\n';\r\n\t\r\n    \/\/ Merhaba Dunya girelim, \u00e7ift t\u0131rnaks\u0131z ile ;) \r\n    cin &gt;&gt; quoted(str5); \r\n    cout &lt;&lt; str5 &lt;&lt; '\\n';\r\n\r\n    \/\/ Yukar\u0131daki sat\u0131rlar\u0131n \u00e7\u0131kt\u0131lar\u0131 a\u015fa\u011f\u0131daki gibi olur:\r\n    \/\/ Merhaba Dunya\r\n    \/\/ Merhaba \"Dunya\"\r\n    \/\/ Merhaba Dunya\r\n    \/\/ Merhaba Dunya#\r\n    \/\/ Merhaba Dunya girelim\r\n    return 0;\r\n}<\/pre>\n<p>Evet sevgili yaz\u0131l\u0131mperver dostlar\u0131m bu yaz\u0131 ile, C++ 14 yolculu\u011fumuzu da tamamlad\u0131k.<\/p>\n<p>\u015eimdi gelelim di\u011fer geli\u015fmeye, uzun s\u00fcrekli takip\u00e7ilerim daha \u00f6nceden SDL2 ile ilgili de bir \u00e7ok yaz\u0131 ve \u00f6rnek kod payla\u015ft\u0131\u011f\u0131m\u0131 hat\u0131rlarlar. Uzun s\u00fcredir akl\u0131mda olan ve SDL2 kullanan, \u00e7ok platform destekli bir g\u00f6rselle\u015ftirme k\u00fct\u00fcphanesi haz\u0131rlama fikrini nihayet hayata ge\u00e7irebildim ve bir s\u00fcredir \u00fczerinde \u00e7al\u0131\u015f\u0131yorum, hen\u00fcz yeterli olgunlukta de\u011fil ama yak\u0131nda sizler ile payla\u015f\u0131yor olaca\u011f\u0131m. Bu k\u00fct\u00fcphane ile, bu sayfada sizler ile payla\u015ft\u0131\u011f\u0131m kabiliyetler ve ara\u00e7lar\u0131 da birebir kullanma f\u0131rsat\u0131 bulaca\u011f\u0131z in\u015fallah. O zaman kadar kendinize \u00e7ok iyi bak\u0131n, g\u00f6r\u00fc\u015fmek dile\u011fiyle.<\/p>\n<h2><strong><span style=\"color: #0000ff;\">Kaynaklar<\/span><\/strong><\/h2>\n<ul>\n<li><a href=\"https:\/\/www.youtube.com\/watch?v=Yop9D3V2KBk\"><span style=\"color: #008000;\"><strong>https:\/\/www.youtube.com\/watch?v=Yop9D3V2KBk<\/strong><\/span><\/a><\/li>\n<li><a href=\"https:\/\/stackoverflow.com\/questions\/20807938\/stdswap-vs-stdexchange-vs-swap-operator\"><span style=\"color: #008000;\"><strong>https:\/\/stackoverflow.com\/questions\/20807938\/stdswap-vs-stdexchange-vs-swap-operator<\/strong><\/span><\/a><\/li>\n<li><a href=\"https:\/\/www.open-std.org\/jtc1\/sc22\/wg21\/docs\/papers\/2013\/n3668.html\"><span style=\"color: #008000;\"><strong>https:\/\/www.open-std.org\/jtc1\/sc22\/wg21\/docs\/papers\/2013\/n3668.html<\/strong><\/span><\/a><\/li>\n<li><a href=\"https:\/\/www.youtube.com\/watch?v=GEbPRS81py4\"><span style=\"color: #008000;\"><strong>https:\/\/www.youtube.com\/watch?v=GEbPRS81py4<\/strong><\/span><\/a><\/li>\n<\/ul>\n","protected":false},"excerpt":{"rendered":"<p>B\u00fct\u00fcn takip\u00e7ilerimin ge\u00e7mi\u015f bayram\u0131n\u0131 kutluyorum. Yaz d\u00f6neminin gelmesi ile birlikte yaz\u0131lar\u0131m\u0131n s\u0131kl\u0131\u011f\u0131n\u0131n azald\u0131\u011f\u0131n\u0131n fark\u0131nday\u0131m, fakat aray\u0131 da \u00e7ok a\u00e7mama niyetindeyim. Ayr\u0131ca, uzun s\u00fcreli takip\u00e7ilerimin ho\u015funa gidecek bir iki geli\u015fme daha var ki onlar\u0131 da yaz\u0131m\u0131n sonuna sakl\u0131yorum \ud83d\ude09 \u015eimdilik, C++ 14&#8217;e ili\u015fkin kalan son bir ka\u00e7 kabiliyete k\u0131saca de\u011finip, C++ 17 ve 20&#8217;de kalan kabiliyetlere&#8230; <a class=\"more-link\" href=\"https:\/\/www.yazilimperver.com\/index.php\/2022\/07\/22\/haftalik-c-50-rakam-ayiraclar-stdexchange-stdinteger_sequence-stdquoted\/\">Continue reading <span class=\"meta-nav\">&#8594;<\/span><\/a><\/p>\n","protected":false},"author":2,"featured_media":174,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_monsterinsights_skip_tracking":false,"_monsterinsights_sitenote_active":false,"_monsterinsights_sitenote_note":"","_monsterinsights_sitenote_category":0,"footnotes":""},"categories":[10,41,188],"tags":[398,1020,1024,1026,1025,42,1021,1023,1019,1022],"class_list":["post-2624","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-c","category-modern-c","category-yazilim-muhendisligi","tag-c-14","tag-digit-seperators","tag-index_sequence","tag-make_index_sequence","tag-make_integer_sequence","tag-modern-c","tag-stdexchange","tag-stdinteger_sequence","tag-stdquoted","tag-stdswap"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v21.0 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Haftal\u0131k C++ 50 - Rakam ay\u0131ra\u00e7lar, std::exchange, std::integer_sequence, std::quoted - Yaz\u0131l\u0131mperver&#039;in D\u00fcnyas\u0131<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.yazilimperver.com\/index.php\/2022\/07\/22\/haftalik-c-50-rakam-ayiraclar-stdexchange-stdinteger_sequence-stdquoted\/\" \/>\n<meta property=\"og:locale\" content=\"tr_TR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Haftal\u0131k C++ 50 - Rakam ay\u0131ra\u00e7lar, std::exchange, std::integer_sequence, std::quoted - Yaz\u0131l\u0131mperver&#039;in D\u00fcnyas\u0131\" \/>\n<meta property=\"og:description\" content=\"B\u00fct\u00fcn takip\u00e7ilerimin ge\u00e7mi\u015f bayram\u0131n\u0131 kutluyorum. Yaz d\u00f6neminin gelmesi ile birlikte yaz\u0131lar\u0131m\u0131n s\u0131kl\u0131\u011f\u0131n\u0131n azald\u0131\u011f\u0131n\u0131n fark\u0131nday\u0131m, fakat aray\u0131 da \u00e7ok a\u00e7mama niyetindeyim. Ayr\u0131ca, uzun s\u00fcreli takip\u00e7ilerimin ho\u015funa gidecek bir iki geli\u015fme daha var ki onlar\u0131 da yaz\u0131m\u0131n sonuna sakl\u0131yorum \ud83d\ude09 \u015eimdilik, C++ 14&#8217;e ili\u015fkin kalan son bir ka\u00e7 kabiliyete k\u0131saca de\u011finip, C++ 17 ve 20&#8217;de kalan kabiliyetlere... Continue reading &#8594;\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.yazilimperver.com\/index.php\/2022\/07\/22\/haftalik-c-50-rakam-ayiraclar-stdexchange-stdinteger_sequence-stdquoted\/\" \/>\n<meta property=\"og:site_name\" content=\"Yaz\u0131l\u0131mperver&#039;in D\u00fcnyas\u0131\" \/>\n<meta property=\"article:published_time\" content=\"2022-07-22T20:52:43+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.yazilimperver.com\/wp-content\/uploads\/2017\/12\/FeaturedImage-e1580417052514.png\" \/>\n\t<meta property=\"og:image:width\" content=\"32\" \/>\n\t<meta property=\"og:image:height\" content=\"32\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"yaz\u0131l\u0131mperver\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Yazan:\" \/>\n\t<meta name=\"twitter:data1\" content=\"yaz\u0131l\u0131mperver\" \/>\n\t<meta name=\"twitter:label2\" content=\"Tahmini okuma s\u00fcresi\" \/>\n\t<meta name=\"twitter:data2\" content=\"5 dakika\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/www.yazilimperver.com\/index.php\/2022\/07\/22\/haftalik-c-50-rakam-ayiraclar-stdexchange-stdinteger_sequence-stdquoted\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/www.yazilimperver.com\/index.php\/2022\/07\/22\/haftalik-c-50-rakam-ayiraclar-stdexchange-stdinteger_sequence-stdquoted\/\"},\"author\":{\"name\":\"yaz\u0131l\u0131mperver\",\"@id\":\"https:\/\/www.yazilimperver.com\/#\/schema\/person\/6497f6de4df6ba469748b861a2b3fcdb\"},\"headline\":\"Haftal\u0131k C++ 50 &#8211; Rakam ay\u0131ra\u00e7lar, std::exchange, std::integer_sequence, std::quoted\",\"datePublished\":\"2022-07-22T20:52:43+00:00\",\"dateModified\":\"2022-07-22T20:52:43+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/www.yazilimperver.com\/index.php\/2022\/07\/22\/haftalik-c-50-rakam-ayiraclar-stdexchange-stdinteger_sequence-stdquoted\/\"},\"wordCount\":1067,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/www.yazilimperver.com\/#\/schema\/person\/6497f6de4df6ba469748b861a2b3fcdb\"},\"keywords\":[\"C++ 14\",\"Digit Seperators\",\"index_sequence\",\"make_index_sequence\",\"make_integer_sequence\",\"Modern C++\",\"std::exchange\",\"std::integer_sequence\",\"std::quoted\",\"std::swap\"],\"articleSection\":[\"C++\",\"Modern C++\",\"Yaz\u0131l\u0131m M\u00fchendisli\u011fi\"],\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/www.yazilimperver.com\/index.php\/2022\/07\/22\/haftalik-c-50-rakam-ayiraclar-stdexchange-stdinteger_sequence-stdquoted\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.yazilimperver.com\/index.php\/2022\/07\/22\/haftalik-c-50-rakam-ayiraclar-stdexchange-stdinteger_sequence-stdquoted\/\",\"url\":\"https:\/\/www.yazilimperver.com\/index.php\/2022\/07\/22\/haftalik-c-50-rakam-ayiraclar-stdexchange-stdinteger_sequence-stdquoted\/\",\"name\":\"Haftal\u0131k C++ 50 - Rakam ay\u0131ra\u00e7lar, std::exchange, std::integer_sequence, std::quoted - Yaz\u0131l\u0131mperver&#039;in D\u00fcnyas\u0131\",\"isPartOf\":{\"@id\":\"https:\/\/www.yazilimperver.com\/#website\"},\"datePublished\":\"2022-07-22T20:52:43+00:00\",\"dateModified\":\"2022-07-22T20:52:43+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/www.yazilimperver.com\/index.php\/2022\/07\/22\/haftalik-c-50-rakam-ayiraclar-stdexchange-stdinteger_sequence-stdquoted\/#breadcrumb\"},\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.yazilimperver.com\/index.php\/2022\/07\/22\/haftalik-c-50-rakam-ayiraclar-stdexchange-stdinteger_sequence-stdquoted\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.yazilimperver.com\/index.php\/2022\/07\/22\/haftalik-c-50-rakam-ayiraclar-stdexchange-stdinteger_sequence-stdquoted\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Ana sayfa\",\"item\":\"https:\/\/www.yazilimperver.com\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Haftal\u0131k C++ 50 &#8211; Rakam ay\u0131ra\u00e7lar, std::exchange, std::integer_sequence, std::quoted\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.yazilimperver.com\/#website\",\"url\":\"https:\/\/www.yazilimperver.com\/\",\"name\":\"Yaz\u0131l\u0131mperver&#039;in D\u00fcnyas\u0131\",\"description\":\"Payla\u015fmak g\u00fczeldir.\",\"publisher\":{\"@id\":\"https:\/\/www.yazilimperver.com\/#\/schema\/person\/6497f6de4df6ba469748b861a2b3fcdb\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/www.yazilimperver.com\/?s={search_term_string}\"},\"query-input\":\"required name=search_term_string\"}],\"inLanguage\":\"tr\"},{\"@type\":[\"Person\",\"Organization\"],\"@id\":\"https:\/\/www.yazilimperver.com\/#\/schema\/person\/6497f6de4df6ba469748b861a2b3fcdb\",\"name\":\"yaz\u0131l\u0131mperver\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"tr\",\"@id\":\"https:\/\/www.yazilimperver.com\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/www.yazilimperver.com\/wp-content\/uploads\/2018\/04\/OnlyIcon-1-114x114.png\",\"contentUrl\":\"https:\/\/www.yazilimperver.com\/wp-content\/uploads\/2018\/04\/OnlyIcon-1-114x114.png\",\"caption\":\"yaz\u0131l\u0131mperver\"},\"logo\":{\"@id\":\"https:\/\/www.yazilimperver.com\/#\/schema\/person\/image\/\"}}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Haftal\u0131k C++ 50 - Rakam ay\u0131ra\u00e7lar, std::exchange, std::integer_sequence, std::quoted - Yaz\u0131l\u0131mperver&#039;in D\u00fcnyas\u0131","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.yazilimperver.com\/index.php\/2022\/07\/22\/haftalik-c-50-rakam-ayiraclar-stdexchange-stdinteger_sequence-stdquoted\/","og_locale":"tr_TR","og_type":"article","og_title":"Haftal\u0131k C++ 50 - Rakam ay\u0131ra\u00e7lar, std::exchange, std::integer_sequence, std::quoted - Yaz\u0131l\u0131mperver&#039;in D\u00fcnyas\u0131","og_description":"B\u00fct\u00fcn takip\u00e7ilerimin ge\u00e7mi\u015f bayram\u0131n\u0131 kutluyorum. Yaz d\u00f6neminin gelmesi ile birlikte yaz\u0131lar\u0131m\u0131n s\u0131kl\u0131\u011f\u0131n\u0131n azald\u0131\u011f\u0131n\u0131n fark\u0131nday\u0131m, fakat aray\u0131 da \u00e7ok a\u00e7mama niyetindeyim. Ayr\u0131ca, uzun s\u00fcreli takip\u00e7ilerimin ho\u015funa gidecek bir iki geli\u015fme daha var ki onlar\u0131 da yaz\u0131m\u0131n sonuna sakl\u0131yorum \ud83d\ude09 \u015eimdilik, C++ 14&#8217;e ili\u015fkin kalan son bir ka\u00e7 kabiliyete k\u0131saca de\u011finip, C++ 17 ve 20&#8217;de kalan kabiliyetlere... Continue reading &#8594;","og_url":"https:\/\/www.yazilimperver.com\/index.php\/2022\/07\/22\/haftalik-c-50-rakam-ayiraclar-stdexchange-stdinteger_sequence-stdquoted\/","og_site_name":"Yaz\u0131l\u0131mperver&#039;in D\u00fcnyas\u0131","article_published_time":"2022-07-22T20:52:43+00:00","og_image":[{"width":32,"height":32,"url":"https:\/\/www.yazilimperver.com\/wp-content\/uploads\/2017\/12\/FeaturedImage-e1580417052514.png","type":"image\/png"}],"author":"yaz\u0131l\u0131mperver","twitter_card":"summary_large_image","twitter_misc":{"Yazan:":"yaz\u0131l\u0131mperver","Tahmini okuma s\u00fcresi":"5 dakika"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.yazilimperver.com\/index.php\/2022\/07\/22\/haftalik-c-50-rakam-ayiraclar-stdexchange-stdinteger_sequence-stdquoted\/#article","isPartOf":{"@id":"https:\/\/www.yazilimperver.com\/index.php\/2022\/07\/22\/haftalik-c-50-rakam-ayiraclar-stdexchange-stdinteger_sequence-stdquoted\/"},"author":{"name":"yaz\u0131l\u0131mperver","@id":"https:\/\/www.yazilimperver.com\/#\/schema\/person\/6497f6de4df6ba469748b861a2b3fcdb"},"headline":"Haftal\u0131k C++ 50 &#8211; Rakam ay\u0131ra\u00e7lar, std::exchange, std::integer_sequence, std::quoted","datePublished":"2022-07-22T20:52:43+00:00","dateModified":"2022-07-22T20:52:43+00:00","mainEntityOfPage":{"@id":"https:\/\/www.yazilimperver.com\/index.php\/2022\/07\/22\/haftalik-c-50-rakam-ayiraclar-stdexchange-stdinteger_sequence-stdquoted\/"},"wordCount":1067,"commentCount":0,"publisher":{"@id":"https:\/\/www.yazilimperver.com\/#\/schema\/person\/6497f6de4df6ba469748b861a2b3fcdb"},"keywords":["C++ 14","Digit Seperators","index_sequence","make_index_sequence","make_integer_sequence","Modern C++","std::exchange","std::integer_sequence","std::quoted","std::swap"],"articleSection":["C++","Modern C++","Yaz\u0131l\u0131m M\u00fchendisli\u011fi"],"inLanguage":"tr","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.yazilimperver.com\/index.php\/2022\/07\/22\/haftalik-c-50-rakam-ayiraclar-stdexchange-stdinteger_sequence-stdquoted\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.yazilimperver.com\/index.php\/2022\/07\/22\/haftalik-c-50-rakam-ayiraclar-stdexchange-stdinteger_sequence-stdquoted\/","url":"https:\/\/www.yazilimperver.com\/index.php\/2022\/07\/22\/haftalik-c-50-rakam-ayiraclar-stdexchange-stdinteger_sequence-stdquoted\/","name":"Haftal\u0131k C++ 50 - Rakam ay\u0131ra\u00e7lar, std::exchange, std::integer_sequence, std::quoted - Yaz\u0131l\u0131mperver&#039;in D\u00fcnyas\u0131","isPartOf":{"@id":"https:\/\/www.yazilimperver.com\/#website"},"datePublished":"2022-07-22T20:52:43+00:00","dateModified":"2022-07-22T20:52:43+00:00","breadcrumb":{"@id":"https:\/\/www.yazilimperver.com\/index.php\/2022\/07\/22\/haftalik-c-50-rakam-ayiraclar-stdexchange-stdinteger_sequence-stdquoted\/#breadcrumb"},"inLanguage":"tr","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.yazilimperver.com\/index.php\/2022\/07\/22\/haftalik-c-50-rakam-ayiraclar-stdexchange-stdinteger_sequence-stdquoted\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/www.yazilimperver.com\/index.php\/2022\/07\/22\/haftalik-c-50-rakam-ayiraclar-stdexchange-stdinteger_sequence-stdquoted\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Ana sayfa","item":"https:\/\/www.yazilimperver.com\/"},{"@type":"ListItem","position":2,"name":"Haftal\u0131k C++ 50 &#8211; Rakam ay\u0131ra\u00e7lar, std::exchange, std::integer_sequence, std::quoted"}]},{"@type":"WebSite","@id":"https:\/\/www.yazilimperver.com\/#website","url":"https:\/\/www.yazilimperver.com\/","name":"Yaz\u0131l\u0131mperver&#039;in D\u00fcnyas\u0131","description":"Payla\u015fmak g\u00fczeldir.","publisher":{"@id":"https:\/\/www.yazilimperver.com\/#\/schema\/person\/6497f6de4df6ba469748b861a2b3fcdb"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.yazilimperver.com\/?s={search_term_string}"},"query-input":"required name=search_term_string"}],"inLanguage":"tr"},{"@type":["Person","Organization"],"@id":"https:\/\/www.yazilimperver.com\/#\/schema\/person\/6497f6de4df6ba469748b861a2b3fcdb","name":"yaz\u0131l\u0131mperver","image":{"@type":"ImageObject","inLanguage":"tr","@id":"https:\/\/www.yazilimperver.com\/#\/schema\/person\/image\/","url":"https:\/\/www.yazilimperver.com\/wp-content\/uploads\/2018\/04\/OnlyIcon-1-114x114.png","contentUrl":"https:\/\/www.yazilimperver.com\/wp-content\/uploads\/2018\/04\/OnlyIcon-1-114x114.png","caption":"yaz\u0131l\u0131mperver"},"logo":{"@id":"https:\/\/www.yazilimperver.com\/#\/schema\/person\/image\/"}}]}},"_links":{"self":[{"href":"https:\/\/www.yazilimperver.com\/index.php\/wp-json\/wp\/v2\/posts\/2624","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.yazilimperver.com\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.yazilimperver.com\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.yazilimperver.com\/index.php\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/www.yazilimperver.com\/index.php\/wp-json\/wp\/v2\/comments?post=2624"}],"version-history":[{"count":6,"href":"https:\/\/www.yazilimperver.com\/index.php\/wp-json\/wp\/v2\/posts\/2624\/revisions"}],"predecessor-version":[{"id":2633,"href":"https:\/\/www.yazilimperver.com\/index.php\/wp-json\/wp\/v2\/posts\/2624\/revisions\/2633"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.yazilimperver.com\/index.php\/wp-json\/wp\/v2\/media\/174"}],"wp:attachment":[{"href":"https:\/\/www.yazilimperver.com\/index.php\/wp-json\/wp\/v2\/media?parent=2624"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.yazilimperver.com\/index.php\/wp-json\/wp\/v2\/categories?post=2624"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.yazilimperver.com\/index.php\/wp-json\/wp\/v2\/tags?post=2624"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}