{"id":610,"date":"2018-11-09T06:42:43","date_gmt":"2018-11-09T06:42:43","guid":{"rendered":"https:\/\/yazilimperver.net\/?p=610"},"modified":"2022-08-13T19:29:19","modified_gmt":"2022-08-13T19:29:19","slug":"haftalik-c-4-yapisal-baglama-structured-binding","status":"publish","type":"post","link":"https:\/\/yazilimperver.net\/index.php\/2018\/11\/09\/haftalik-c-4-yapisal-baglama-structured-binding\/","title":{"rendered":"[:tr]Haftal\u0131k C++ &#8211; 4 Yap\u0131sal Ba\u011flama (&#8220;Structured Binding&#8221;)[:en]Weekly C++ &#8211; 4 Structured Binding[:]"},"content":{"rendered":"<p>[:tr]Merhabalar arkada\u015flar, yeni bir haftal\u0131k C++ yaz\u0131s\u0131 ile birlikteyiz. Bu yaz\u0131m\u0131zda da modern C++ 17 ile birlikte gelen bir di\u011fer kabiliyet olan <em>&#8220;Structured Binding&#8221;<\/em>&#8216;e bakaca\u011f\u0131z. Ben yaz\u0131mda buna k\u0131saca &#8220;yap\u0131sal ba\u011flama&#8221; diyece\u011fim.<br \/>\nBu kabiliyet bize ne kazand\u0131r\u0131yor? K\u0131saca bu kabiliyet ile birlikte birden fazla de\u011fi\u015fkenin tek bir ifade ile<em> &#8220;tuple&#8221;\/&#8221;pair&#8221;<\/em> ya da benzeri yap\u0131lar\u0131 kullanarak ilklendirebilece\u011fiz, daha \u00f6nce <em>std::tuple<\/em> ve benzeri yap\u0131larla dolayl\u0131 yoldan sa\u011flanan \u00e7oklu de\u011fer d\u00f6nme kabiliyetini de art\u0131k kullanabilece\u011fiz. Bu kabiliyetin arkas\u0131nda yatan motivasyonun detaylar\u0131 i\u00e7in kaynaklar k\u0131sm\u0131nda verdi\u011fim standart dok\u00fcman\u0131na bir g\u00f6z atman\u0131zda fayda var.<br \/>\nBuna benzer kabiliyetleri ba\u015fka diller a\u00e7\u0131p atama (&#8220;<em>unpacking<\/em>&#8220;), \u00e7oklu atama (&#8220;<em>multiple assignment<\/em>&#8220;) isimleri ile sunuyorlar. \u00d6r. Pyhton da `(x, y) = 10, 20` diyerekten tek bir sat\u0131rda ilgili de\u011fi\u015fkenleri atayabiliyorsunuz.<br \/>\n\u0130\u015fte bu kabiliyet art\u0131k C++ ile de sunuluyor.<br \/>\nYaz\u0131mda detayl\u0131 olarak bu kabiliyeti tek tek anlatmaktansa genel yap\u0131s\u0131ndan bahsedip daha \u00f6nceki yaz\u0131lar\u0131mda oldu\u011fu gibi \u00e7e\u015fitli \u00f6rnekler \u00fczerinden giderek sizlere aktarmay\u0131 planl\u0131yorum.<\/p>\n<h2><span style=\"color: #0000ff;\"><strong>Genel yap\u0131<\/strong><\/span><\/h2>\n<p>Yap\u0131sal ba\u011flama genel olarak a\u015fa\u011f\u0131daki format ile \u00f6zetlenebilir:<br \/>\n<span style=\"color: #ff0000;\">auto [element1, element2, &#8230;.] = { pair, tuple, struct ya da dizi tan\u0131mlamalar\u0131 }<\/span><\/p>\n<p>Dikkat edilecek hususlar:<\/p>\n<ul>\n<li>&#8220;element1, &#8230;, &#8221; &#8216;de virg\u00fcl ile ayr\u0131lan elemanlar\u0131n adeti ile atama operat\u00f6r\u00fc sa\u011f\u0131ndaki elemanlar\u0131n say\u0131s\u0131 ayn\u0131 olmal\u0131d\u0131r,<\/li>\n<li>Atama operat\u00f6r\u00fcn\u00fcn sa\u011f\u0131nda ise a\u015fa\u011f\u0131dakilerden birisi olabilir:\n<ul>\n<li>std:: pair ya da std::tuple<\/li>\n<li>bir struct nesnesi. Struct nesnesi i\u00e7erisindeki \u00fcyelerin hi\u00e7birisi statik olmamal\u0131. Bunlar\u0131n tan\u0131mlanma s\u0131ras\u0131na g\u00f6re atama operat\u00f6r\u00fcn\u00fcn solundaki elemanlar doldurulacak<\/li>\n<\/ul>\n<\/li>\n<li>Sabit boyutlu dizi<\/li>\n<li>Yukar\u0131daki durumlardan birisi sa\u011flanmad\u0131\u011f\u0131 durumda derleme hatas\u0131 ile kar\u015f\u0131la\u015f\u0131rs\u0131n\u0131z<\/li>\n<li>Bu arada atamalar s\u0131ras\u0131nda gereksiz kopyalamalar\u0131 \u00f6nlemek ad\u0131na olabildi\u011fince atama operat\u00f6r\u00fcn\u00fcn solunda referans tiplerini kullanmaya \u00f6zen g\u00f6stermekte fayda var<\/li>\n<li>Operat\u00f6r\u00fcn solunda <em><strong>auto, auto&amp;, const auto, const auto&amp;<\/strong><\/em> ve <em><strong>auto&amp;&amp;<\/strong><\/em> kullan\u0131mlar\u0131 m\u00fcmk\u00fcn.<\/li>\n<\/ul>\n<h2><span style=\"color: #0000ff;\"><strong>std::tuple ile kullan\u0131m\u0131<\/strong><\/span><\/h2>\n<p>Yap\u0131sal ba\u011flama&#8217;n\u0131n ilk kullan\u0131m \u00f6rne\u011fi <em>tuple<\/em>&#8216;lar ile alakl\u0131 olacak. \u00d6zellikle &#8220;<em>pair<\/em>&#8221; (bayad\u0131r mevcut) ya da &#8220;<em>tuple<\/em>&#8221; (C++ 11 ile birlikte geldi) benzeri yap\u0131lar ile u\u011fra\u015f\u0131yor iseniz bunlar\u0131n bar\u0131nd\u0131rd\u0131\u011f\u0131 de\u011ferlere eri\u015fme ihtiyac\u0131 duymu\u015fsunuzdur. <em>std::pair<\/em> asl\u0131nda <em>map<\/em> konteynerinin temel ta\u015f\u0131 diyebiliriz.<em> Std::tuple<\/em> da <em>std::pair<\/em>&#8216;in asl\u0131nda bir anlamda genelle\u015ftirilmi\u015f hali. Normal \u015fartlarda <em>tuple<\/em> ile ifade edilen bir de\u011fi\u015fkene ili\u015fkin elemanlar\u0131 farkl\u0131 de\u011fi\u015fkenlere atamak (ya da a\u00e7\u0131p kullanmak) i\u00e7in \u00f6nceden takip edilen y\u00f6ntem <em>std::tie()<\/em> metoduydu. Yeni gelen bu kabiliyet ile birlikte <strong><span style=\"color: #ff0000;\">&#8220;auto [var1, var2, &#8230;] = tuple;&#8221;<\/span><\/strong> kullan\u0131m\u0131 ile bu de\u011fi\u015fkenlere eri\u015fim sa\u011flan\u0131yor. Hemen buna ili\u015fkin bir kullan\u0131ma bakal\u0131m:<\/p>\n<pre class=\"lang:c++ decode:true \">#include &lt;iostream&gt;\r\n#include &lt;tuple&gt;\r\n\r\nint main()\r\n{\r\n    auto employee = std::make_tuple(\"Ahmet\", \"Can\", 35, 174.3);\r\n\r\n    \/\/ C++ 17 Oncesi\r\n    \/\/ tuple icerisindeki degisklenlere erismek icin\r\n    {\r\n        \/\/ Oncelikle calisan verileri tutmak icin degiskenleri tanimlayalim\r\n        std::string name;\r\n        std::string surname;\r\n        int age;\r\n        double height;\r\n        \r\n        std::tie(name, surname, age, height) = employee;\r\n        std::cout &lt;&lt; \"name = \" &lt;&lt; name &lt;&lt; \" surname = \" &lt;&lt; surname &lt;&lt; \" age = \" &lt;&lt; age &lt;&lt; \" height = \" &lt;&lt; height &lt;&lt; \"cm\" &lt;&lt; std::endl;\r\n    }\r\n\r\n    \/\/ C++ 17 Sonrasi kullanim\r\n    {\r\n        auto [ name, surname, age, height ] = employee;\r\n        std::cout &lt;&lt; \"name = \" &lt;&lt; name &lt;&lt; \" surname = \" &lt;&lt; surname &lt;&lt; \" age = \" &lt;&lt; age &lt;&lt; \" height = \" &lt;&lt; height &lt;&lt; \"cm\" &lt;&lt; std::endl;\r\n    }\r\n\r\n    return 0;\r\n}<\/pre>\n<p><em>tuple<\/em> kullan\u0131m\u0131ndaki bir di\u011fer s\u0131k\u0131nt\u0131 ise <em>std::tie()<\/em> ile <em>tuple<\/em>&#8216;daki elemanlar\u0131n referans\u0131n\u0131 almak m\u00fcmk\u00fcn de\u011fil idi. Bunun i\u00e7in tek yol &#8220;<em>std::get&lt;2&gt;(employee)<\/em>&#8221; metodu. Yeni mekanizma ile art\u0131k bu da m\u00fcmk\u00fcn:<\/p>\n<pre class=\"lang:c++ decode:true \">#include &lt;iostream&gt;\r\n#include &lt;tuple&gt;\r\n\r\nint main()\r\n{\r\n    auto employee = std::make_tuple(\"Ahmet\", \"Can\", 35, 174.3);\r\n\r\n    \/\/ C++ 17 Oncesi\r\n    \/\/ tuple icerisindeki degiskenlerin referanslarini almak icin\r\n    {\r\n        \/\/ Oncelikle calisan verileri tutmak icin degiskenleri tanimlayalim\r\n        auto&amp; name = std::get&lt;0&gt;(employee);\r\n        auto&amp; surname = std::get&lt;1&gt;(employee);\r\n        auto&amp; age = std::get&lt;2&gt;(employee);\r\n        auto&amp; height = std::get&lt;2&gt;(employee);\r\n        \r\n        std::cout &lt;&lt; \"name = \" &lt;&lt; name &lt;&lt; \" surname = \" &lt;&lt; surname &lt;&lt; \" age = \" &lt;&lt; age &lt;&lt; \" height = \" &lt;&lt; height &lt;&lt; \"cm\" &lt;&lt; std::endl;\r\n\r\n        \/\/ Yasi artt\u0131ralim\r\n        age++;\r\n\r\n        std::cout &lt;&lt; \"yeni yas = \" &lt;&lt; std::get&lt;2&gt;(employee) &lt;&lt; std::endl;\r\n    }\r\n\r\n    \/\/ C++ 17 Sonrasi kullanim\r\n    {\r\n        auto&amp; [ name, surname, age, height ] = tuple;\r\n\r\n        std::cout &lt;&lt; \"name = \" &lt;&lt; name &lt;&lt; \" surname = \" &lt;&lt; surname &lt;&lt; \" age = \" &lt;&lt; age &lt;&lt; \" height = \" &lt;&lt; height &lt;&lt; \"cm\" &lt;&lt; std::endl;\r\n\r\n        \/\/ Yasi artt\u0131ralim\r\n        age++;\r\n\r\n        std::cout &lt;&lt; \"yeni yas = \" &lt;&lt; std::get&lt;2&gt;(employee) &lt;&lt; std::endl;\r\n    }\r\n\r\n    return 0;\r\n}<\/pre>\n<p>Buradaki kullan\u0131mlar\u0131n benzeri <em>std::pair<\/em> ve <em>std::array<\/em> i\u00e7in de ge\u00e7erlidir.<\/p>\n<h2><span style=\"color: #0000ff;\"><strong>struct<\/strong><strong> ile kullan\u0131m\u0131<\/strong><\/span><\/h2>\n<p><em>std::tuple<\/em>&#8216;a benzer \u015fekilde <em>struct<\/em> nesnelerinin de her bir eleman\u0131na bu mekanizma ile tek bir seferde ula\u015fabiliyoruz.<\/p>\n<pre class=\"lang:c++ decode:true \">#include &lt;iostream&gt;\r\n#include &lt;string&gt;\r\n#include &lt;tuple&gt;\r\n\r\nstruct Employee\r\n{\r\n    std::string name;\r\n    std::string surname;\r\n    int age;\r\n    double height;\r\n};\r\n\r\nint main()\r\n{\r\n    Employee ahmet { \"Ahmet\", \"Can\", 35, 174.3 };\r\n\r\n    \/\/ Oncelikle calisan verileri tutmak icin degiskenleri tanimlayalim\r\n    std::string name;\r\n    std::string surname;\r\n    int age;\r\n    double height;\r\n    \r\n    \/\/ degerleri alalim\r\n    auto [ name, surname, age, height ] = ahmet;\r\n    std::cout &lt;&lt; \"name = \" &lt;&lt; name &lt;&lt; \" surname = \" &lt;&lt; surname &lt;&lt; \" age = \" &lt;&lt; age &lt;&lt; \" height = \" &lt;&lt; height &lt;&lt; \"cm\" &lt;&lt; std::endl;\r\n\r\n    return 0;\r\n}\r\n<\/pre>\n<p>Bu kullan\u0131mlar\u0131n benzer \u015fekilde <em>struct<\/em> d\u00f6nen metotlarda da kullanabilirsiniz.<\/p>\n<h2><span style=\"color: #0000ff;\"><strong>Diziler<\/strong><strong> ile kullan\u0131m\u0131<\/strong><\/span><\/h2>\n<p>Yukar\u0131da anlat\u0131lan kullan\u0131mlar ile birlikte yap\u0131sal ba\u011flamaya geleneksel diziler ile de kullanabilirsiniz. A\u015fa\u011f\u0131da bu kullan\u0131ma ili\u015fki \u00f6rne\u011fi g\u00f6rebilirsiniz.<br \/>\nBurada \u00f6nemli olan ilgili dizinin boyutunun belli olmas\u0131.<\/p>\n<pre class=\"lang:c++ decode:true \">int arrayExample[] = { 47, 11 };\r\n\r\n\/\/ x ve y arrayExample elemanlar\u0131 ile doldurulur\r\nauto [x, y] = arr; \r\n\r\n\/\/ Derleme hatas\u0131 boyutlar farkl\u0131\r\nauto [z] = arr;<\/pre>\n<h2><span style=\"color: #0000ff;\"><strong>move semanti\u011fi<\/strong><strong> ile kullan\u0131m\u0131<\/strong><\/span><\/h2>\n<p>Yap\u0131sal ba\u011flama yukar\u0131da bahsetti\u011fim gibi move semanti\u011fi ile de kullan\u0131labilmektedir. A\u015fa\u011f\u0131da bu kullan\u0131ma ili\u015fkin \u00f6rnek kodu g\u00f6rebilirsiniz:<\/p>\n<pre class=\"lang:c++ decode:true \">Employee ms = { \"Ahmet\", \"Can\", 35, 174.5 };\r\n\r\n\/\/ \u0130lgili ms nesnesine rvalue referans\r\nauto&amp;&amp; [name, surname, age, height] = std::move(ms); \r\n\r\n\/\/ \"Ahmet Can\" bas\u0131l\u0131r\r\nstd::cout &lt;&lt; \"ms.name: \" &lt;&lt; ms.surname &lt;&lt; '\\n'; \r\n\r\n\/\/ \u0130smi de tasiyalim\r\nstd::string newName = std::move(name); \r\n\r\n\/\/ Degeri belli olmayan bir sey basilir (cunku tasindi yukar\u0131da)\r\nstd::cout &lt;&lt; \"ms.surname: \" &lt;&lt; ms.surname &lt;&lt; std::endl; \r\n\r\n\/\/ Benzer sekilde degeri belli olmayan bir sey basilir (cunku tasindi yukar\u0131da)\r\nstd::cout &lt;&lt; \"name: \" &lt;&lt; name &lt;&lt; std::endl; \r\n\r\n\/\/ Ali basilir\r\nstd::cout &lt;&lt; \"New name: \" &lt;&lt; newName &lt;&lt; std::endl;<\/pre>\n<h2><span style=\"color: #0000ff;\"><strong>std::map konteyneri<\/strong><strong> ile kullan\u0131m\u0131<\/strong><\/span><\/h2>\n<p>Bu mekanizman\u0131n bir di\u011fer kullan\u0131m\u0131 ise<em> std::map<\/em> konteynerinin elemanlar\u0131n\u0131n \u00fczerinde gezinme.<\/p>\n<pre class=\"lang:c++ decode:true\">#include &lt;iostream&gt;\r\n#include &lt;string&gt;\r\n#include &lt;unordered_map&gt;\r\n\r\ntemplate&lt;typename K, typename V&gt;\r\nvoid printMap(std::unordered_map&lt;K, V&gt; const &amp;m)\r\n{\r\n    for (auto const&amp; pair: m) \r\n    {\r\n        std::cout &lt;&lt; \"{\" &lt;&lt; pair.first &lt;&lt; \": \" &lt;&lt; pair.second &lt;&lt; \"}\\n\";\r\n    }\r\n}\r\n\r\nint main()\r\n{\r\n    std::unordered_map&lt;int, std::string&gt; m = \r\n    {\r\n        {1, \"Begum\"},\r\n        {8, \"Ahmet\"},\r\n        {3, \"Ayse\"}\r\n    };\r\n\r\n    \/\/ C++17 Oncesi\r\n    for (auto const&amp; pair: m) \r\n    {\r\n        std::cout &lt;&lt; \"{\" &lt;&lt; pair.first &lt;&lt; \": \" &lt;&lt; pair.second &lt;&lt; \"}\\n\";\r\n    }\r\n\r\n    \/\/ C++17 Sonras\u0131\r\n    \/\/ Daha anlasilir kullanim\r\n    for (auto&amp;&amp; [key, value]: m) \r\n    {\r\n        std::cout &lt;&lt; \"{\" &lt;&lt; key &lt;&lt; \": \" &lt;&lt; value &lt;&lt; \"}\\n\";\r\n    }\r\n\r\n    return 0;\r\n}<\/pre>\n<h2><span style=\"color: #0000ff;\"><strong>Kaynaklar<\/strong><\/span><\/h2>\n<ul>\n<li><span style=\"color: #008000;\"><a style=\"color: #008000;\" href=\"https:\/\/wg21.link\/p0217r3\"><strong>https:\/\/wg21.link\/p0217r3<\/strong><\/a><\/span><\/li>\n<li><span style=\"color: #008000;\"><a style=\"color: #008000;\" href=\"http:\/\/www.open-std.org\/jtc1\/sc22\/wg21\/docs\/papers\/2015\/p0144r0.pdf\"><strong>http:\/\/www.open-std.org\/jtc1\/sc22\/wg21\/docs\/papers\/2015\/p0144r0.pdf<\/strong><\/a><\/span><\/li>\n<li><span style=\"color: #008000;\"><a style=\"color: #008000;\" href=\"https:\/\/skebanga.github.io\/structured-bindings\/\"><strong>https:\/\/skebanga.github.io\/structured-bindings\/<\/strong><\/a><\/span><\/li>\n<li><span style=\"color: #008000;\"><a style=\"color: #008000;\" href=\"https:\/\/www.bfilipek.com\/2017\/07\/cpp17-details-simplifications.html#structured-binding-declarations\"><strong>https:\/\/www.bfilipek.com\/2017\/07\/cpp17-details-simplifications.html#structured-binding-declarations<\/strong><\/a><\/span><\/li>\n<\/ul>\n<p>[:en]Hello everybody, we are together again with another weekly C++ post. In this post, we are going to take a look at a feature that provided with C++ 17, <em>&#8220;Structured Binding&#8221;<\/em>&#8216;. So what does this feature provide us? Briefly, this feature let you assign or initialize multiple variables with <code>tuple\/pair<\/code>or similar structs with one statement. It is now also possible to return multiple variables which were possible only via std::tuple like constructs. You may check out the references for more motivation behind this feature.<\/p>\n<p>Similar capabilites are provided as\u00a0<em>Unpacking, Multiple Assignment\u00a0<\/em>in other programming languages. For instance, in Python you can assign two variables with a single <code>(x, y) = 10, 20<\/code>statement. And now this is also possible with C++.<\/p>\n<p>In my post, instead of going through all details of this capability, I will try to give you some important usages of this capability with sample codes.<\/p>\n<h2><strong><span style=\"color: #3366ff;\">General syntax:<\/span><\/strong><\/h2>\n<p>Structured binding can be summarized with following syntax:<br \/>\n<span style=\"color: #ff0000;\">auto [element1, element2, &#8230;.] = { pair, tuple, struct or array\u00a0 }<\/span><\/p>\n<p>Points to consider:<\/p>\n<ul>\n<li>&#8220;element1, &#8230;, &#8221; the number of elements seperated with comma should be same as the ones provided at the right side of assignment operator,<\/li>\n<li>The element at the right side of assignment can be one of following:\n<ul>\n<li>std:: pair or std::tuple<\/li>\n<li>A struct instance. All of the struct members should be non-static. The order of definition is important,<\/li>\n<\/ul>\n<\/li>\n<li>Fixed size arrays,<\/li>\n<li>You may encounter with compilation error if one of above conditions is not met,<\/li>\n<li>To prevent any unnecessary copy operation, reference types should be used at the left side of assignment operator as much as possible,<\/li>\n<li><em><strong>auto, auto&amp;, const auto, const auto&amp;<\/strong><\/em>\u00a0and\u00a0<em><strong>auto&amp;&amp;<\/strong><\/em> can be used at the left side of assignment operator.<\/li>\n<\/ul>\n<h2><strong><span style=\"color: #3366ff;\">Usage with std::tuple:<\/span><\/strong><\/h2>\n<p>The first usage of structured binding will be about <em>tuple&#8217;s<\/em>. If you are using &#8220;std::pair&#8221; or &#8220;std::tuple&#8221; then you probably required to access the individual data. In fact,\u00a0<em>std::pair<\/em>\u00a0is an important part of <em>std::map<\/em>.<em> Std::tuple<\/em>\u00a0is a more generalized version of <em>std::pair<\/em>. Traditionally (before C++ 17), the approach to access the individual elements of <em>tuple <\/em>and assign them to other variables is perfomed through\u00a0<em>std::tie()<\/em> method. With structured binding, it is possible to use\u00a0<strong><span style=\"color: #ff0000;\">&#8220;auto [var1, var2, &#8230;] = tuple;&#8221;<\/span><\/strong>\u00a0to access corresponding variables. Let us look at an example usage:<\/p>\n<pre class=\"lang:c++ decode:true \">#include &lt;iostream&gt;\r\n#include &lt;tuple&gt;\r\n\r\nint main()\r\n{\r\n    auto employee = std::make_tuple(\"Ahmet\", \"Can\", 35, 174.3);\r\n\r\n    \/\/ Pre-C++ 17\r\n    \/\/ To access the tuple elements\r\n    {\r\n        \/\/ F\u0131rst define variables\r\n        std::string name;\r\n        std::string surname;\r\n        int age;\r\n        double height;\r\n        \r\n        std::tie(name, surname, age, height) = employee;\r\n        std::cout &lt;&lt; \"name = \" &lt;&lt; name &lt;&lt; \" surname = \" &lt;&lt; surname &lt;&lt; \" age = \" &lt;&lt; age &lt;&lt; \" height = \" &lt;&lt; height &lt;&lt; \"cm\" &lt;&lt; std::endl;\r\n    }\r\n\r\n    \/\/ After C++ 17\r\n    {\r\n        auto [ name, surname, age, height ] = employee;\r\n        std::cout &lt;&lt; \"name = \" &lt;&lt; name &lt;&lt; \" surname = \" &lt;&lt; surname &lt;&lt; \" age = \" &lt;&lt; age &lt;&lt; \" height = \" &lt;&lt; height &lt;&lt; \"cm\" &lt;&lt; std::endl;\r\n    }\r\n\r\n    return 0;\r\n}<\/pre>\n<p>Another issue with\u00a0<em>tuple<\/em>\u00a0usage is that it is not possible to get reference of elements with\u00a0<em>std::tie()<\/em>\u00a0method. Only way to do so is to use &#8220;<em>std::get&lt;2&gt;(employee)<\/em>&#8221; method. With this capability, this is also possible:<\/p>\n<pre class=\"lang:c++ decode:true\">#include &lt;iostream&gt;\r\n#include &lt;tuple&gt;\r\n\r\nint main()\r\n{\r\n    auto employee = std::make_tuple(\"Ahmet\", \"Can\", 35, 174.3);\r\n\r\n    \/\/ Before C++ 17\r\n    \/\/ To obtain the references of tuple  elements\r\n    {\r\n        \/\/ First of all define variables\r\n        auto&amp; name = std::get&lt;0&gt;(employee);\r\n        auto&amp; surname = std::get&lt;1&gt;(employee);\r\n        auto&amp; age = std::get&lt;2&gt;(employee);\r\n        auto&amp; height = std::get&lt;2&gt;(employee);\r\n        \r\n        std::cout &lt;&lt; \"name = \" &lt;&lt; name &lt;&lt; \" surname = \" &lt;&lt; surname &lt;&lt; \" age = \" &lt;&lt; age &lt;&lt; \" height = \" &lt;&lt; height &lt;&lt; \"cm\" &lt;&lt; std::endl;\r\n\r\n        \/\/ Incremenet age\r\n        age++;\r\n\r\n        std::cout &lt;&lt; \"yeni yas = \" &lt;&lt; std::get&lt;2&gt;(employee) &lt;&lt; std::endl;\r\n    }\r\n\r\n    \/\/ After C++ 17\r\n    {\r\n        auto&amp; [ name, surname, age, height ] = tuple;\r\n\r\n        std::cout &lt;&lt; \"name = \" &lt;&lt; name &lt;&lt; \" surname = \" &lt;&lt; surname &lt;&lt; \" age = \" &lt;&lt; age &lt;&lt; \" height = \" &lt;&lt; height &lt;&lt; \"cm\" &lt;&lt; std::endl;\r\n\r\n        \/\/ Increment age\r\n        age++;\r\n\r\n        std::cout &lt;&lt; \"yeni yas = \" &lt;&lt; std::get&lt;2&gt;(employee) &lt;&lt; std::endl;\r\n    }\r\n\r\n    return 0;\r\n}<\/pre>\n<p>Same usage is also possible for <em>std::pair<\/em> and\u00a0<em>std::array<\/em>.<\/p>\n<h2><strong><span style=\"color: #3366ff;\">Usage with struct:<\/span><\/strong><\/h2>\n<p>We can also access and assign each member of <em>struct<\/em>\u00a0objects similar to std::tuple.<\/p>\n<pre class=\"lang:c++ decode:true\">#include &lt;iostream&gt;\r\n#include &lt;string&gt;\r\n#include &lt;tuple&gt;\r\n\r\nstruct Employee\r\n{\r\n    std::string name;\r\n    std::string surname;\r\n    int age;\r\n    double height;\r\n};\r\n\r\nint main()\r\n{\r\n    Employee ahmet { \"Ahmet\", \"Can\", 35, 174.3 };\r\n\r\n    \/\/ Let us define variables to hold employee data\r\n    std::string name;\r\n    std::string surname;\r\n    int age;\r\n    double height;\r\n    \r\n    \/\/ obtain values\r\n    auto [ name, surname, age, height ] = ahmet;\r\n    std::cout &lt;&lt; \"name = \" &lt;&lt; name &lt;&lt; \" surname = \" &lt;&lt; surname &lt;&lt; \" age = \" &lt;&lt; age &lt;&lt; \" height = \" &lt;&lt; height &lt;&lt; \"cm\" &lt;&lt; std::endl;\r\n\r\n    return 0;\r\n}\r\n<\/pre>\n<p>This can also be used with functions that return <em>struct<\/em>.<\/p>\n<h2><strong><span style=\"color: #3366ff;\">Usage with arrays:<\/span><\/strong><\/h2>\n<p>The structured binding can also be used with traditional arrays. A sample code for this usage is provided below. It should be noted that the size of array should be matched.<\/p>\n<pre class=\"lang:c++ decode:true\">int arrayExample[] = { 47, 11 };\r\n\r\n\/\/ x and y is filled with arrayExample elements\r\nauto [x, y] = arr; \r\n\r\n\/\/ Compilation error. Sizes do not match\r\nauto [z] = arr;<\/pre>\n<h2><strong><span style=\"color: #3366ff;\">Usage with move semantics:<\/span><\/strong><\/h2>\n<p>As I mentioned above structured binding can also be used with move semantics. You can find a sample code that illustrate this usage:<\/p>\n<pre class=\"lang:c++ decode:true \">Employee ms = { \"Ahmet\", \"Can\", 35, 174.5 };\r\n\r\n\/\/ rvalue reference to ms object\r\nauto&amp;&amp; [name, surname, age, height] = std::move(ms); \r\n\r\n\/\/ \"Ahmet Can\" is printed\r\nstd::cout &lt;&lt; \"ms.name: \" &lt;&lt; ms.surname &lt;&lt; '\\n'; \r\n\r\n\/\/ Move name\r\nstd::string newName = std::move(name); \r\n\r\n\/\/ Invalid and nondetermined value is printed (we already moved value)\r\nstd::cout &lt;&lt; \"ms.surname: \" &lt;&lt; ms.surname &lt;&lt; std::endl; \r\n\r\n\/\/ Invalid and nondetermined value is also printed (we already moved value)\r\nstd::cout &lt;&lt; \"name: \" &lt;&lt; name &lt;&lt; std::endl; \r\n\r\n\/\/ Ali is printed\r\nstd::cout &lt;&lt; \"New name: \" &lt;&lt; newName &lt;&lt; std::endl;<\/pre>\n<h2><strong><span style=\"color: #3366ff;\">Usage with std::map:<\/span><\/strong><\/h2>\n<p>You can also use this mechanism with\u00a0<em>std::map<\/em>\u00a0container to traverse elements as illustrated below:<\/p>\n<pre class=\"lang:c++ decode:true\">#include &lt;iostream&gt;\r\n#include &lt;string&gt;\r\n#include &lt;unordered_map&gt;\r\n\r\ntemplate&lt;typename K, typename V&gt;\r\nvoid printMap(std::unordered_map&lt;K, V&gt; const &amp;m)\r\n{\r\n    for (auto const&amp; pair: m) \r\n    {\r\n        std::cout &lt;&lt; \"{\" &lt;&lt; pair.first &lt;&lt; \": \" &lt;&lt; pair.second &lt;&lt; \"}\\n\";\r\n    }\r\n}\r\n\r\nint main()\r\n{\r\n    std::unordered_map&lt;int, std::string&gt; m = \r\n    {\r\n        {1, \"Begum\"},\r\n        {8, \"Ahmet\"},\r\n        {3, \"Ayse\"}\r\n    };\r\n\r\n    \/\/ Before C++17\r\n    for (auto const&amp; pair: m) \r\n    {\r\n        std::cout &lt;&lt; \"{\" &lt;&lt; pair.first &lt;&lt; \": \" &lt;&lt; pair.second &lt;&lt; \"}\\n\";\r\n    }\r\n\r\n    \/\/ After C++17\r\n    \/\/ More clear and simple usage\r\n    for (auto&amp;&amp; [key, value]: m) \r\n    {\r\n        std::cout &lt;&lt; \"{\" &lt;&lt; key &lt;&lt; \": \" &lt;&lt; value &lt;&lt; \"}\\n\";\r\n    }\r\n\r\n    return 0;\r\n}<\/pre>\n<h2><span style=\"color: #3366ff;\"><strong>References:<\/strong><\/span><\/h2>\n<ul>\n<li><a href=\"https:\/\/wg21.link\/p0217r3\"><span style=\"color: #339966;\"><strong>https:\/\/wg21.link\/p0217r3<\/strong><\/span><\/a><\/li>\n<li><a href=\"http:\/\/www.open-std.org\/jtc1\/sc22\/wg21\/docs\/papers\/2015\/p0144r0.pdf\"><span style=\"color: #339966;\"><strong>http:\/\/www.open-std.org\/jtc1\/sc22\/wg21\/docs\/papers\/2015\/p0144r0.pdf<\/strong><\/span><\/a><\/li>\n<li><a href=\"https:\/\/skebanga.github.io\/structured-bindings\/\"><span style=\"color: #339966;\"><strong>https:\/\/skebanga.github.io\/structured-bindings\/<\/strong><\/span><\/a><\/li>\n<li><a href=\"https:\/\/www.bfilipek.com\/2017\/07\/cpp17-details-simplifications.html#structured-binding-declarations\"><span style=\"color: #339966;\"><strong>https:\/\/www.bfilipek.com\/2017\/07\/cpp17-details-simplifications.html#structured-binding-declarations<\/strong><\/span><\/a><\/li>\n<\/ul>\n<p>[:]<\/p>\n","protected":false},"excerpt":{"rendered":"<p>[:tr]Merhabalar arkada\u015flar, yeni bir haftal\u0131k C++ yaz\u0131s\u0131 ile birlikteyiz. Bu yaz\u0131m\u0131zda da modern C++ 17 ile birlikte gelen bir di\u011fer kabiliyet olan &#8220;Structured Binding&#8221;&#8216;e bakaca\u011f\u0131z. Ben yaz\u0131mda buna k\u0131saca &#8220;yap\u0131sal ba\u011flama&#8221; diyece\u011fim. Bu kabiliyet bize ne kazand\u0131r\u0131yor? K\u0131saca bu kabiliyet ile birlikte birden fazla de\u011fi\u015fkenin tek bir ifade ile &#8220;tuple&#8221;\/&#8221;pair&#8221; ya da benzeri yap\u0131lar\u0131 kullanarak&#8230; <a class=\"more-link\" href=\"https:\/\/yazilimperver.net\/index.php\/2018\/11\/09\/haftalik-c-4-yapisal-baglama-structured-binding\/\">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":{"dsgo_overlay_header":false,"dsgo_overlay_header_text_color":"","dsgo_overlay_skip_top_bar":false,"_designsetgo_exclude_llms":false,"footnotes":""},"categories":[10,41,188],"tags":[13,234,241,42,105,240,238,203,239],"class_list":["post-610","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-c","category-modern-c","category-yazilim-muhendisligi","tag-c","tag-c-17","tag-haftalik","tag-modern-c","tag-stdmove","tag-stdtie","tag-structured-binding","tag-weekly","tag-yapisal-baglama"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v28.4 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>[:tr]Haftal\u0131k C++ - 4 Yap\u0131sal Ba\u011flama (&quot;Structured Binding&quot;)[:en]Weekly C++ - 4 Structured Binding[:] - 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:\/\/yazilimperver.net\/index.php\/2018\/11\/09\/haftalik-c-4-yapisal-baglama-structured-binding\/\" \/>\n<meta property=\"og:locale\" content=\"tr_TR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"[:tr]Haftal\u0131k C++ - 4 Yap\u0131sal Ba\u011flama (&quot;Structured Binding&quot;)[:en]Weekly C++ - 4 Structured Binding[:] - Yaz\u0131l\u0131mperver&#039;in D\u00fcnyas\u0131\" \/>\n<meta property=\"og:description\" content=\"[:tr]Merhabalar arkada\u015flar, yeni bir haftal\u0131k C++ yaz\u0131s\u0131 ile birlikteyiz. Bu yaz\u0131m\u0131zda da modern C++ 17 ile birlikte gelen bir di\u011fer kabiliyet olan &#8220;Structured Binding&#8221;&#8216;e bakaca\u011f\u0131z. Ben yaz\u0131mda buna k\u0131saca &#8220;yap\u0131sal ba\u011flama&#8221; diyece\u011fim. Bu kabiliyet bize ne kazand\u0131r\u0131yor? K\u0131saca bu kabiliyet ile birlikte birden fazla de\u011fi\u015fkenin tek bir ifade ile &#8220;tuple&#8221;\/&#8221;pair&#8221; ya da benzeri yap\u0131lar\u0131 kullanarak... Continue reading &#8594;\" \/>\n<meta property=\"og:url\" content=\"https:\/\/yazilimperver.net\/index.php\/2018\/11\/09\/haftalik-c-4-yapisal-baglama-structured-binding\/\" \/>\n<meta property=\"og:site_name\" content=\"Yaz\u0131l\u0131mperver&#039;in D\u00fcnyas\u0131\" \/>\n<meta property=\"article:published_time\" content=\"2018-11-09T06:42:43+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2022-08-13T19:29:19+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/yazilimperver.net\/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=\"13 dakika\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/yazilimperver.net\\\/index.php\\\/2018\\\/11\\\/09\\\/haftalik-c-4-yapisal-baglama-structured-binding\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/yazilimperver.net\\\/index.php\\\/2018\\\/11\\\/09\\\/haftalik-c-4-yapisal-baglama-structured-binding\\\/\"},\"author\":{\"name\":\"yaz\u0131l\u0131mperver\",\"@id\":\"https:\\\/\\\/yazilimperver.net\\\/#\\\/schema\\\/person\\\/534a27860d56170658018ac4c6f1af16\"},\"headline\":\"[:tr]Haftal\u0131k C++ &#8211; 4 Yap\u0131sal Ba\u011flama (&#8220;Structured Binding&#8221;)[:en]Weekly C++ &#8211; 4 Structured Binding[:]\",\"datePublished\":\"2018-11-09T06:42:43+00:00\",\"dateModified\":\"2022-08-13T19:29:19+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/yazilimperver.net\\\/index.php\\\/2018\\\/11\\\/09\\\/haftalik-c-4-yapisal-baglama-structured-binding\\\/\"},\"wordCount\":1325,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\\\/\\\/yazilimperver.net\\\/#\\\/schema\\\/person\\\/534a27860d56170658018ac4c6f1af16\"},\"image\":{\"@id\":\"https:\\\/\\\/yazilimperver.net\\\/index.php\\\/2018\\\/11\\\/09\\\/haftalik-c-4-yapisal-baglama-structured-binding\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/yazilimperver.net\\\/wp-content\\\/uploads\\\/2017\\\/12\\\/FeaturedImage-e1580417052514.png\",\"keywords\":[\"c++\",\"c++ 17\",\"haftal\u0131k\",\"Modern C++\",\"std::move\",\"std::tie\",\"structured binding\",\"Weekly\",\"yap\u0131sal ba\u011flama\"],\"articleSection\":[\"C++\",\"Modern C++\",\"Yaz\u0131l\u0131m M\u00fchendisli\u011fi\"],\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/yazilimperver.net\\\/index.php\\\/2018\\\/11\\\/09\\\/haftalik-c-4-yapisal-baglama-structured-binding\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/yazilimperver.net\\\/index.php\\\/2018\\\/11\\\/09\\\/haftalik-c-4-yapisal-baglama-structured-binding\\\/\",\"url\":\"https:\\\/\\\/yazilimperver.net\\\/index.php\\\/2018\\\/11\\\/09\\\/haftalik-c-4-yapisal-baglama-structured-binding\\\/\",\"name\":\"[:tr]Haftal\u0131k C++ - 4 Yap\u0131sal Ba\u011flama (\\\"Structured Binding\\\")[:en]Weekly C++ - 4 Structured Binding[:] - Yaz\u0131l\u0131mperver&#039;in D\u00fcnyas\u0131\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/yazilimperver.net\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/yazilimperver.net\\\/index.php\\\/2018\\\/11\\\/09\\\/haftalik-c-4-yapisal-baglama-structured-binding\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/yazilimperver.net\\\/index.php\\\/2018\\\/11\\\/09\\\/haftalik-c-4-yapisal-baglama-structured-binding\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/yazilimperver.net\\\/wp-content\\\/uploads\\\/2017\\\/12\\\/FeaturedImage-e1580417052514.png\",\"datePublished\":\"2018-11-09T06:42:43+00:00\",\"dateModified\":\"2022-08-13T19:29:19+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/yazilimperver.net\\\/index.php\\\/2018\\\/11\\\/09\\\/haftalik-c-4-yapisal-baglama-structured-binding\\\/#breadcrumb\"},\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/yazilimperver.net\\\/index.php\\\/2018\\\/11\\\/09\\\/haftalik-c-4-yapisal-baglama-structured-binding\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"tr\",\"@id\":\"https:\\\/\\\/yazilimperver.net\\\/index.php\\\/2018\\\/11\\\/09\\\/haftalik-c-4-yapisal-baglama-structured-binding\\\/#primaryimage\",\"url\":\"https:\\\/\\\/yazilimperver.net\\\/wp-content\\\/uploads\\\/2017\\\/12\\\/FeaturedImage-e1580417052514.png\",\"contentUrl\":\"https:\\\/\\\/yazilimperver.net\\\/wp-content\\\/uploads\\\/2017\\\/12\\\/FeaturedImage-e1580417052514.png\",\"width\":32,\"height\":32},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/yazilimperver.net\\\/index.php\\\/2018\\\/11\\\/09\\\/haftalik-c-4-yapisal-baglama-structured-binding\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Ana sayfa\",\"item\":\"https:\\\/\\\/yazilimperver.net\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Haftal\u0131k C++ &#8211; 4 Yap\u0131sal Ba\u011flama (&#8220;Structured Binding&#8221;)\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/yazilimperver.net\\\/#website\",\"url\":\"https:\\\/\\\/yazilimperver.net\\\/\",\"name\":\"Yaz\u0131l\u0131mperver'in D\u00fcnyas\u0131\",\"description\":\"Payla\u015fmak g\u00fczeldir.\",\"publisher\":{\"@id\":\"https:\\\/\\\/yazilimperver.net\\\/#\\\/schema\\\/person\\\/534a27860d56170658018ac4c6f1af16\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/yazilimperver.net\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"tr\"},{\"@type\":[\"Person\",\"Organization\"],\"@id\":\"https:\\\/\\\/yazilimperver.net\\\/#\\\/schema\\\/person\\\/534a27860d56170658018ac4c6f1af16\",\"name\":\"yaz\u0131l\u0131mperver\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"tr\",\"@id\":\"https:\\\/\\\/yazilimperver.net\\\/wp-content\\\/uploads\\\/2018\\\/04\\\/cropped-OnlyIcon-1.png\",\"url\":\"https:\\\/\\\/yazilimperver.net\\\/wp-content\\\/uploads\\\/2018\\\/04\\\/cropped-OnlyIcon-1.png\",\"contentUrl\":\"https:\\\/\\\/yazilimperver.net\\\/wp-content\\\/uploads\\\/2018\\\/04\\\/cropped-OnlyIcon-1.png\",\"width\":512,\"height\":512,\"caption\":\"yaz\u0131l\u0131mperver\"},\"logo\":{\"@id\":\"https:\\\/\\\/yazilimperver.net\\\/wp-content\\\/uploads\\\/2018\\\/04\\\/cropped-OnlyIcon-1.png\"}}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"[:tr]Haftal\u0131k C++ - 4 Yap\u0131sal Ba\u011flama (\"Structured Binding\")[:en]Weekly C++ - 4 Structured Binding[:] - 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:\/\/yazilimperver.net\/index.php\/2018\/11\/09\/haftalik-c-4-yapisal-baglama-structured-binding\/","og_locale":"tr_TR","og_type":"article","og_title":"[:tr]Haftal\u0131k C++ - 4 Yap\u0131sal Ba\u011flama (\"Structured Binding\")[:en]Weekly C++ - 4 Structured Binding[:] - Yaz\u0131l\u0131mperver&#039;in D\u00fcnyas\u0131","og_description":"[:tr]Merhabalar arkada\u015flar, yeni bir haftal\u0131k C++ yaz\u0131s\u0131 ile birlikteyiz. Bu yaz\u0131m\u0131zda da modern C++ 17 ile birlikte gelen bir di\u011fer kabiliyet olan &#8220;Structured Binding&#8221;&#8216;e bakaca\u011f\u0131z. Ben yaz\u0131mda buna k\u0131saca &#8220;yap\u0131sal ba\u011flama&#8221; diyece\u011fim. Bu kabiliyet bize ne kazand\u0131r\u0131yor? K\u0131saca bu kabiliyet ile birlikte birden fazla de\u011fi\u015fkenin tek bir ifade ile &#8220;tuple&#8221;\/&#8221;pair&#8221; ya da benzeri yap\u0131lar\u0131 kullanarak... Continue reading &#8594;","og_url":"https:\/\/yazilimperver.net\/index.php\/2018\/11\/09\/haftalik-c-4-yapisal-baglama-structured-binding\/","og_site_name":"Yaz\u0131l\u0131mperver&#039;in D\u00fcnyas\u0131","article_published_time":"2018-11-09T06:42:43+00:00","article_modified_time":"2022-08-13T19:29:19+00:00","og_image":[{"width":32,"height":32,"url":"https:\/\/yazilimperver.net\/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":"13 dakika"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/yazilimperver.net\/index.php\/2018\/11\/09\/haftalik-c-4-yapisal-baglama-structured-binding\/#article","isPartOf":{"@id":"https:\/\/yazilimperver.net\/index.php\/2018\/11\/09\/haftalik-c-4-yapisal-baglama-structured-binding\/"},"author":{"name":"yaz\u0131l\u0131mperver","@id":"https:\/\/yazilimperver.net\/#\/schema\/person\/534a27860d56170658018ac4c6f1af16"},"headline":"[:tr]Haftal\u0131k C++ &#8211; 4 Yap\u0131sal Ba\u011flama (&#8220;Structured Binding&#8221;)[:en]Weekly C++ &#8211; 4 Structured Binding[:]","datePublished":"2018-11-09T06:42:43+00:00","dateModified":"2022-08-13T19:29:19+00:00","mainEntityOfPage":{"@id":"https:\/\/yazilimperver.net\/index.php\/2018\/11\/09\/haftalik-c-4-yapisal-baglama-structured-binding\/"},"wordCount":1325,"commentCount":0,"publisher":{"@id":"https:\/\/yazilimperver.net\/#\/schema\/person\/534a27860d56170658018ac4c6f1af16"},"image":{"@id":"https:\/\/yazilimperver.net\/index.php\/2018\/11\/09\/haftalik-c-4-yapisal-baglama-structured-binding\/#primaryimage"},"thumbnailUrl":"https:\/\/yazilimperver.net\/wp-content\/uploads\/2017\/12\/FeaturedImage-e1580417052514.png","keywords":["c++","c++ 17","haftal\u0131k","Modern C++","std::move","std::tie","structured binding","Weekly","yap\u0131sal ba\u011flama"],"articleSection":["C++","Modern C++","Yaz\u0131l\u0131m M\u00fchendisli\u011fi"],"inLanguage":"tr","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/yazilimperver.net\/index.php\/2018\/11\/09\/haftalik-c-4-yapisal-baglama-structured-binding\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/yazilimperver.net\/index.php\/2018\/11\/09\/haftalik-c-4-yapisal-baglama-structured-binding\/","url":"https:\/\/yazilimperver.net\/index.php\/2018\/11\/09\/haftalik-c-4-yapisal-baglama-structured-binding\/","name":"[:tr]Haftal\u0131k C++ - 4 Yap\u0131sal Ba\u011flama (\"Structured Binding\")[:en]Weekly C++ - 4 Structured Binding[:] - Yaz\u0131l\u0131mperver&#039;in D\u00fcnyas\u0131","isPartOf":{"@id":"https:\/\/yazilimperver.net\/#website"},"primaryImageOfPage":{"@id":"https:\/\/yazilimperver.net\/index.php\/2018\/11\/09\/haftalik-c-4-yapisal-baglama-structured-binding\/#primaryimage"},"image":{"@id":"https:\/\/yazilimperver.net\/index.php\/2018\/11\/09\/haftalik-c-4-yapisal-baglama-structured-binding\/#primaryimage"},"thumbnailUrl":"https:\/\/yazilimperver.net\/wp-content\/uploads\/2017\/12\/FeaturedImage-e1580417052514.png","datePublished":"2018-11-09T06:42:43+00:00","dateModified":"2022-08-13T19:29:19+00:00","breadcrumb":{"@id":"https:\/\/yazilimperver.net\/index.php\/2018\/11\/09\/haftalik-c-4-yapisal-baglama-structured-binding\/#breadcrumb"},"inLanguage":"tr","potentialAction":[{"@type":"ReadAction","target":["https:\/\/yazilimperver.net\/index.php\/2018\/11\/09\/haftalik-c-4-yapisal-baglama-structured-binding\/"]}]},{"@type":"ImageObject","inLanguage":"tr","@id":"https:\/\/yazilimperver.net\/index.php\/2018\/11\/09\/haftalik-c-4-yapisal-baglama-structured-binding\/#primaryimage","url":"https:\/\/yazilimperver.net\/wp-content\/uploads\/2017\/12\/FeaturedImage-e1580417052514.png","contentUrl":"https:\/\/yazilimperver.net\/wp-content\/uploads\/2017\/12\/FeaturedImage-e1580417052514.png","width":32,"height":32},{"@type":"BreadcrumbList","@id":"https:\/\/yazilimperver.net\/index.php\/2018\/11\/09\/haftalik-c-4-yapisal-baglama-structured-binding\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Ana sayfa","item":"https:\/\/yazilimperver.net\/"},{"@type":"ListItem","position":2,"name":"Haftal\u0131k C++ &#8211; 4 Yap\u0131sal Ba\u011flama (&#8220;Structured Binding&#8221;)"}]},{"@type":"WebSite","@id":"https:\/\/yazilimperver.net\/#website","url":"https:\/\/yazilimperver.net\/","name":"Yaz\u0131l\u0131mperver'in D\u00fcnyas\u0131","description":"Payla\u015fmak g\u00fczeldir.","publisher":{"@id":"https:\/\/yazilimperver.net\/#\/schema\/person\/534a27860d56170658018ac4c6f1af16"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/yazilimperver.net\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"tr"},{"@type":["Person","Organization"],"@id":"https:\/\/yazilimperver.net\/#\/schema\/person\/534a27860d56170658018ac4c6f1af16","name":"yaz\u0131l\u0131mperver","image":{"@type":"ImageObject","inLanguage":"tr","@id":"https:\/\/yazilimperver.net\/wp-content\/uploads\/2018\/04\/cropped-OnlyIcon-1.png","url":"https:\/\/yazilimperver.net\/wp-content\/uploads\/2018\/04\/cropped-OnlyIcon-1.png","contentUrl":"https:\/\/yazilimperver.net\/wp-content\/uploads\/2018\/04\/cropped-OnlyIcon-1.png","width":512,"height":512,"caption":"yaz\u0131l\u0131mperver"},"logo":{"@id":"https:\/\/yazilimperver.net\/wp-content\/uploads\/2018\/04\/cropped-OnlyIcon-1.png"}}]}},"_links":{"self":[{"href":"https:\/\/yazilimperver.net\/index.php\/wp-json\/wp\/v2\/posts\/610","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/yazilimperver.net\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/yazilimperver.net\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/yazilimperver.net\/index.php\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/yazilimperver.net\/index.php\/wp-json\/wp\/v2\/comments?post=610"}],"version-history":[{"count":0,"href":"https:\/\/yazilimperver.net\/index.php\/wp-json\/wp\/v2\/posts\/610\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/yazilimperver.net\/index.php\/wp-json\/wp\/v2\/media\/174"}],"wp:attachment":[{"href":"https:\/\/yazilimperver.net\/index.php\/wp-json\/wp\/v2\/media?parent=610"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/yazilimperver.net\/index.php\/wp-json\/wp\/v2\/categories?post=610"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/yazilimperver.net\/index.php\/wp-json\/wp\/v2\/tags?post=610"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}