{"id":2096,"date":"2021-02-28T15:41:29","date_gmt":"2021-02-28T15:41:29","guid":{"rendered":"https:\/\/www.yazilimperver.com\/?p=2096"},"modified":"2021-02-28T15:41:29","modified_gmt":"2021-02-28T15:41:29","slug":"haftalik-c-36-decltype-stdis_same-stddeclval","status":"publish","type":"post","link":"https:\/\/www.yazilimperver.com\/index.php\/2021\/02\/28\/haftalik-c-36-decltype-stdis_same-stddeclval\/","title":{"rendered":"Haftal\u0131k C++ 36 &#8211; decltype, std::is_same, std::declval"},"content":{"rendered":"<div style=\"width: 561px\" class=\"wp-caption aligncenter\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/images.unsplash.com\/photo-1611532736597-de2d4265fba3?ixid=MXwxMjA3fDB8MHxzZWFyY2h8Mjl8fHR5cGVzfGVufDB8fDB8&amp;ixlib=rb-1.2.1&amp;w=1000&amp;q=80\" alt=\"\" width=\"551\" height=\"826\" \/><p class=\"wp-caption-text\">Photo by Kelly Sikkema (unsplash.com)<\/p><\/div>\n<p>C++ 11 ile gelen yeni kabiliyetlere bakmaya devam ediyoruz. Evet, bir ka\u00e7 yaz\u0131 sonra bitecek demi\u015ftim, lakin i\u015fle i\u015fle bitmiyor g\u00fczellikler \ud83d\ude42 Ger\u00e7i fazla da kalmad\u0131.<\/p>\n<p>Bug\u00fcn de\u011finece\u011fim kabiliyetlerden ilki &#8220;<em>decltype<\/em>&#8220;. Asl\u0131nda bu, C++ 11 ile gelen yeni bir anahtar kelime. \u0130smine bak\u0131nca, bir tip tan\u0131mlama gibi gelse de (declare a type?), asl\u0131nda ge\u00e7irilen parametrenin tipine kullanmaya yard\u0131mc\u0131 olmak i\u00e7in sunulan bir mekanizma. Peki neden &#8220;typeid&#8221; gibi daha a\u00e7\u0131klay\u0131c\u0131 bir anahtar kelime kullanm\u0131yoruz. \u00c7\u00fcnk\u00fc typeid zaten var \ud83d\ude00 ama buna ileride de\u011finece\u011fim.<\/p>\n<p>Temelde bu anahtar kelime ile, ge\u00e7irilen birimin ya da ifadenin tipi d\u00f6n\u00fclebilmekte ve bunu da tipin ihtiya\u00e7 duyulaca\u011f\u0131 yerlerde kullanabiliyorsunuz. Kafalar\u0131 daha fazla kar\u0131\u015ft\u0131rmadan, her zaman yapt\u0131\u011f\u0131m\u0131z gibi \u00f6rnek bir kod \u00fczerinden kabiliyete g\u00f6z atal\u0131m. Yine \u00f6rne\u011fi,<a href=\"https:\/\/en.cppreference.com\/w\/cpp\/language\/decltype\"><span style=\"color: #008000;\"><strong> C++ referans sayfas\u0131ndan<\/strong><\/span><\/a> al\u0131yorum, elbette biraz sosluyoruz \ud83d\ude09<\/p>\n<pre class=\"lang:c++ decode:true\">#include &lt;iostream&gt;\r\n#include &lt;vector&gt;\r\n#include &lt;type_traits&gt;\r\n \r\nclass A\r\n{\r\npublic:\r\n    int memberFunction(double);\r\n    double x; \r\n};\r\nconst A* a;\r\n \r\n\/\/ y'nin tipi double (nasil tanimlandiysa oyle)\r\ndecltype(a-&gt;x) y;   \r\n\r\n\/\/ Parantez kullan\u0131m\u0131: \r\n\/\/ z'nin tipi double&amp;. Neden boyle? Cunku ekstra eklenen parantezler\r\n\/\/ ifadeyi l value expression'a ceviriyor\r\ndecltype((a-&gt;x)) z = y; \r\n\r\n\/\/ Asagida donus tipi de, template parametrelerinin tipinden otomatik olarak belirlenebiliyor\r\n\/\/ Donus degerinin otomatik atanmasi C++ 14 ile sunuluyor, aklinizda bulunsun\r\ntemplate&lt;typename T, typename U&gt;\r\nauto add(T t, U u) -&gt; decltype(t + u) \r\n                                      \r\n{\r\n    return t + u;\r\n}\r\n \r\nint main()\r\n{\r\n    int i = 33;\r\n    decltype(i) j = i * 2;\r\n    \r\n    \/\/ Konteynerler ile de kullanabilirsiniz\r\n    \/\/ Bu durumda: vector&lt;double&gt;\r\n    std::vector&lt;decltype(a-&gt;x)&gt; vi; \r\n    \r\n    \/\/ Sinif uyesi fonksiyonlarin tipleri icin de kullanabilirsiniz\r\n    \/\/ int A::(*)(double)\r\n    using memberFunctionPointer = decltype(&amp;A::memberFunction); \r\n \r\n    std::cout &lt;&lt; \"i = \" &lt;&lt; i &lt;&lt; \", \"\r\n              &lt;&lt; \"j = \" &lt;&lt; j &lt;&lt; '\\n'\r\n              &lt;&lt; \"Toplama (int, float): \" &lt;&lt; add&lt;float, int&gt;(10.5F, 5) &lt;&lt; '\\n'\r\n              &lt;&lt; \"Toplama (int, int): \" &lt;&lt; add&lt;int, int&gt;(10.5F, 5) &lt;&lt; '\\n';\r\n \r\n    auto f = [](int a, int b) -&gt; int\r\n    {\r\n        return a * b;\r\n    };\r\n \r\n    \/\/ Benzer sekilde lambda tiplerini de bu anlamda kullanabiliyoruz\r\n    decltype(f) g = f; \r\n    i = f(2, 2);\r\n    j = g(3, 3);\r\n \r\n    std::cout &lt;&lt; \"i = \" &lt;&lt; i &lt;&lt; \", \"\r\n              &lt;&lt; \"j = \" &lt;&lt; j &lt;&lt; '\\n';\r\n              \r\n    return 0;\r\n}<\/pre>\n<p>Yukar\u0131da parantez kullan\u0131m\u0131 ile asl\u0131nda temsil edilen tipin nas\u0131l de\u011fi\u015fti\u011fine ufak bir \u00f6rnek verdik. Bu kullan\u0131m, bununla s\u0131n\u0131rl\u0131 de\u011fil. A\u015fa\u011f\u0131daki &#8220;de\u011fer kategorisine&#8221; g\u00f6re, <em>declype<\/em>(<strong>t<\/strong>) i\u00e7in d\u00f6n\u00fclen tiplere \u00f6rnekleri g\u00f6rebilirsiniz. Burada t&#8217;nin tipinin T oldu\u011funu farz edelim:<\/p>\n<ul>\n<li><code>T<\/code>, e\u011fer t <em>prvalue<\/em> ise,<\/li>\n<li><code>T&amp;<\/code>, e\u011fer t <em>lvalue<\/em> ise,<\/li>\n<li><code>TT&amp;&amp;<\/code>, e\u011fer t <em>xvalue<\/em> ise.<\/li>\n<\/ul>\n<p>Daha \u00f6nce l-value ve r-value&#8217;ye de\u011finmi\u015ftim. Di\u011ferlerine burada girmeyece\u011fim ama merakl\u0131 okuyucular\u0131m, <span style=\"color: #008000;\"><strong>https:\/\/en.cppreference.com\/w\/cpp\/language\/value_category<\/strong><\/span> sayfas\u0131na g\u00f6z atabilirler. Bunlar, \u00f6rnekler ile gayet g\u00fczel a\u00e7\u0131klanmakta.<\/p>\n<p>\u015eimdi gelelim &#8220;<span style=\"color: #008000;\"><strong><a style=\"color: #008000;\" href=\"https:\/\/en.cppreference.com\/w\/cpp\/language\/typeid\">typeid<\/a><\/strong><\/span>&#8221; anahtar kelimesine. <em>typeid<\/em> ile <em>decltype<\/em> anahtar kelimeleri birbirlerine benzer olsalar da, \u00e7ok temel farkl\u0131l\u0131klar\u0131 var. <em>typeid<\/em>, ilgili tipin \u00e7al\u0131\u015fma zaman\u0131nda (RTTI mekanizmas\u0131) tipini \u00f6\u011frenmeye y\u00f6nelik olsa da, <em>declype<\/em> ile derleme zaman\u0131nda bu tipe ili\u015fkin i\u015flemleri ger\u00e7ekle\u015ftirebiliyorsunuz.\u00a0<em>typeid&#8217;<\/em>ye biraz mesafeli yakla\u015f\u0131lmakta, \u00f6zellikle aviyonik ya da emniyet kritik yaz\u0131l\u0131mlar geli\u015ftiriyorsan\u0131z, uzak da durmal\u0131s\u0131n\u0131z (keza \u00e7o\u011fu zaman bu \u00f6zellik kapat\u0131lmakta).<\/p>\n<p>Peki, tipleri ald\u0131k g\u00fczel. \u0130ki tipin ayn\u0131 olup\/olmad\u0131\u011f\u0131n\u0131 nas\u0131l kontrol edece\u011fiz. Onun i\u00e7in de <em>&lt;type_traits&gt;<\/em> ba\u015fl\u0131k dosyas\u0131 i\u00e7erisinde sunulan <em>std::same<\/em>&#8216;i kullanabilirsiniz. Hemen bakal\u0131m:<\/p>\n<pre class=\"lang:c++ decode:true \">#include &lt;iostream&gt;\r\n#include &lt;type_traits&gt;\r\n#include &lt;cstdint&gt;\r\n \r\nint main()\r\n{\r\n    int i = 33;\r\n    decltype(i) j = i * 2;\r\n    std::cout &lt;&lt; std::boolalpha;\r\n  \r\n    std::cout &lt;&lt; \"i ve j ayn\u0131 m\u0131 kardes? \" \r\n              &lt;&lt; std::is_same_v&lt;decltype(i), decltype(j)&gt; &lt;&lt; '\\n';\r\n              \r\n    \/\/ int 32 bit ise true\r\n    std::cout &lt;&lt; std::is_same&lt;int, std::int32_t&gt;::value &lt;&lt; ' ' &lt;&lt; '\\n';\r\n\r\n    \/\/ dogru degil\r\n    std::cout &lt;&lt; std::is_same&lt;int, short&gt;::value &lt;&lt; ' ' &lt;&lt; '\\n';\r\n \r\n    \/\/ simdi bir de degiskenleri karsilastiralim\r\n    long double num1 = 1.0;\r\n    long double num2 = 2.0;\r\n    std::cout &lt;&lt; std::is_same_v&lt;decltype(num1), decltype(num2)&gt; &lt;&lt; '\\n'; \r\n\r\n    return 0;\r\n}<\/pre>\n<p>Tahmin edebilece\u011finiz \u00fczere bu anahtar kelimeler her ne kadar yukar\u0131da g\u00f6sterdi\u011fim \u015fekilde de kullan\u0131labilse de, as\u0131l endam ve g\u00fczelliklerini <em>template&#8217;lar <\/em>ile kullan\u0131mlar\u0131nda ortaya koyuyorlar. Kaynaklar k\u0131sm\u0131na ekledi\u011fim O&#8217;Reilly&#8217;nin kitab\u0131nda bunun istemedi\u011finiz kadar detay\u0131na inmekte \ud83d\ude42<\/p>\n<p>Son bahsedece\u011fim eleman <strong>std::declval<\/strong>. Bu da <em>&lt;utility&gt;<\/em> ba\u015fl\u0131k dosyas\u0131 i\u00e7erisinde tan\u0131mlanmakta. Bunun kullan\u0131m\u0131, yukar\u0131dakilere g\u00f6re ilk etapta net olmayabilir. Ben yine de a\u00e7\u0131klamaya \u00e7al\u0131\u015fay\u0131m, \u00f6rnek ile de netle\u015ftiririz. Yukar\u0131da da bahsetti\u011fim gibi, tipleri referans olarak d\u00f6nebilmek i\u00e7in\u00a0 ilgili tipin nesnesini (<em>decltype(a)<\/em>)\u00a0 ya da ifadesini (<em>decltype(5)<\/em>) decltype&#8217;a ge\u00e7irmeniz gerekiyor. K\u0131saca, <strong>std::declval<\/strong> ile, herhangi bir tipin nesnesini kullanmadan, o tipe ili\u015fkin rvalue referans d\u00f6nebilirsiniz.<\/p>\n<p><strong>std::declval<\/strong>, \u00e7o\u011funlukla, template&#8217;larda template parametresi, yap\u0131c\u0131 i\u00e7ermedi\u011fi fakat ilgili parametre tipine ili\u015fkin d\u00f6n\u00fc\u015f de\u011ferine de ihtiya\u00e7 oldu\u011fu durumlarda da kullan\u0131lmaktad\u0131r. Hemen, <span style=\"color: #008000;\"><a style=\"color: #008000;\" href=\"https:\/\/en.cppreference.com\/w\/cpp\/utility\/declval\"><strong>std::declval<\/strong> <\/a><\/span>sayfasindan bir \u00f6rne\u011fe bakal\u0131m:<\/p>\n<pre class=\"lang:c++ decode:true\">#include &lt;utility&gt;\r\n#include &lt;iostream&gt;\r\n \r\nstruct Default { int foo() const { return 1; } };\r\n \r\nstruct NonDefault\r\n{\r\n    NonDefault() = delete;\r\n    int foo() const { return 1; }\r\n};\r\n \r\nint main()\r\n{\r\n    \/\/ n1'\u0131n tipi int\r\n    decltype(Default().foo()) n1 = 1;                   \r\n\r\n    \/\/ buna normalde hata verir. Neden? NonDefault'un varsay\u0131lan yap\u0131c\u0131s\u0131 yok\r\n\/\/  decltype(NonDefault().foo()) n2 = n1;               \r\n\r\n    \/\/ i\u015fte tam bu noktada declval imdad\u0131n\u0131za yeti\u015fiyor\r\n    \/\/ n2'nin tipi de int\r\n    decltype(std::declval&lt;NonDefault&gt;().foo()) n2 = n1; \r\n    std::cout &lt;&lt; \"n1 = \" &lt;&lt; n1 &lt;&lt; '\\n'\r\n              &lt;&lt; \"n2 = \" &lt;&lt; n2 &lt;&lt; '\\n';\r\n}<\/pre>\n<p>Evet sevgili yaz\u0131l\u0131mperver dostlar\u0131m, yine bir yaz\u0131m\u0131n sonuna geldik. Bir sonraki yaz\u0131mda g\u00f6r\u00fc\u015fmek dile\u011fiyle kendinize \u00e7ok iyi bak\u0131n, bol sa\u011fl\u0131kl\u0131 ve kodlu g\u00fcnler \ud83d\ude00<\/p>\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:\/\/en.cppreference.com\/w\/cpp\/language\/value_category\"><strong>https:\/\/en.cppreference.com\/w\/cpp\/language\/value_category<\/strong><\/a><\/span><\/li>\n<li><span style=\"color: #008000;\"><a style=\"color: #008000;\" href=\"https:\/\/en.cppreference.com\/w\/cpp\/language\/typeid\"><strong>https:\/\/en.cppreference.com\/w\/cpp\/language\/typeid<\/strong><\/a><\/span><\/li>\n<li><span style=\"color: #008000;\"><a style=\"color: #008000;\" href=\"https:\/\/en.cppreference.com\/w\/cpp\/utility\/declval\"><strong>https:\/\/en.cppreference.com\/w\/cpp\/utility\/declval<\/strong><\/a><\/span><\/li>\n<li><span style=\"color: #008000;\"><a style=\"color: #008000;\" href=\"https:\/\/www.tutorialspoint.com\/cpp_standard_library\/cpp_utility_declval.htm\"><strong>https:\/\/www.tutorialspoint.com\/cpp_standard_library\/cpp_utility_declval.htm<\/strong><\/a><\/span><\/li>\n<li><span style=\"color: #008000;\"><a style=\"color: #008000;\" href=\"https:\/\/riptutorial.com\/cplusplus\/example\/18513\/decltype\"><strong>https:\/\/riptutorial.com\/cplusplus\/example\/18513\/decltype<\/strong><\/a><\/span><\/li>\n<li><span style=\"color: #008000;\"><a style=\"color: #008000;\" href=\"https:\/\/www.cprogramming.com\/c++11\/c++11-auto-decltype-return-value-after-function.html\"><strong>https:\/\/www.cprogramming.com\/c++11\/c++11-auto-decltype-return-value-after-function.html<\/strong><\/a><\/span><\/li>\n<li><a href=\"https:\/\/www.oreilly.com\/library\/view\/effective-modern-c\/9781491908419\/ch01.html\"><strong><span style=\"color: #008000;\">https:\/\/www.oreilly.com\/library\/view\/effective-modern-c\/9781491908419\/ch01.html<\/span><\/strong><\/a><\/li>\n<\/ul>\n","protected":false},"excerpt":{"rendered":"<p>C++ 11 ile gelen yeni kabiliyetlere bakmaya devam ediyoruz. Evet, bir ka\u00e7 yaz\u0131 sonra bitecek demi\u015ftim, lakin i\u015fle i\u015fle bitmiyor g\u00fczellikler \ud83d\ude42 Ger\u00e7i fazla da kalmad\u0131. Bug\u00fcn de\u011finece\u011fim kabiliyetlerden ilki &#8220;decltype&#8220;. Asl\u0131nda bu, C++ 11 ile gelen yeni bir anahtar kelime. \u0130smine bak\u0131nca, bir tip tan\u0131mlama gibi gelse de (declare a type?), asl\u0131nda ge\u00e7irilen parametrenin&#8230; <a class=\"more-link\" href=\"https:\/\/www.yazilimperver.com\/index.php\/2021\/02\/28\/haftalik-c-36-decltype-stdis_same-stddeclval\/\">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],"tags":[46,848,42,852,850,849,853,851],"class_list":["post-2096","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-c","category-modern-c","tag-c-11","tag-decltype","tag-modern-c","tag-rtti","tag-stddeclval","tag-stdis_same","tag-type_traits","tag-typeid"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v21.0 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Haftal\u0131k C++ 36 - decltype, std::is_same, std::declval - 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\/2021\/02\/28\/haftalik-c-36-decltype-stdis_same-stddeclval\/\" \/>\n<meta property=\"og:locale\" content=\"tr_TR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Haftal\u0131k C++ 36 - decltype, std::is_same, std::declval - Yaz\u0131l\u0131mperver&#039;in D\u00fcnyas\u0131\" \/>\n<meta property=\"og:description\" content=\"C++ 11 ile gelen yeni kabiliyetlere bakmaya devam ediyoruz. Evet, bir ka\u00e7 yaz\u0131 sonra bitecek demi\u015ftim, lakin i\u015fle i\u015fle bitmiyor g\u00fczellikler \ud83d\ude42 Ger\u00e7i fazla da kalmad\u0131. Bug\u00fcn de\u011finece\u011fim kabiliyetlerden ilki &#8220;decltype&#8220;. Asl\u0131nda bu, C++ 11 ile gelen yeni bir anahtar kelime. \u0130smine bak\u0131nca, bir tip tan\u0131mlama gibi gelse de (declare a type?), asl\u0131nda ge\u00e7irilen parametrenin... Continue reading &#8594;\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.yazilimperver.com\/index.php\/2021\/02\/28\/haftalik-c-36-decltype-stdis_same-stddeclval\/\" \/>\n<meta property=\"og:site_name\" content=\"Yaz\u0131l\u0131mperver&#039;in D\u00fcnyas\u0131\" \/>\n<meta property=\"article:published_time\" content=\"2021-02-28T15:41:29+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=\"6 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\/2021\/02\/28\/haftalik-c-36-decltype-stdis_same-stddeclval\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/www.yazilimperver.com\/index.php\/2021\/02\/28\/haftalik-c-36-decltype-stdis_same-stddeclval\/\"},\"author\":{\"name\":\"yaz\u0131l\u0131mperver\",\"@id\":\"https:\/\/www.yazilimperver.com\/#\/schema\/person\/6497f6de4df6ba469748b861a2b3fcdb\"},\"headline\":\"Haftal\u0131k C++ 36 &#8211; decltype, std::is_same, std::declval\",\"datePublished\":\"2021-02-28T15:41:29+00:00\",\"dateModified\":\"2021-02-28T15:41:29+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/www.yazilimperver.com\/index.php\/2021\/02\/28\/haftalik-c-36-decltype-stdis_same-stddeclval\/\"},\"wordCount\":679,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/www.yazilimperver.com\/#\/schema\/person\/6497f6de4df6ba469748b861a2b3fcdb\"},\"keywords\":[\"C++ 11\",\"decltype\",\"Modern C++\",\"RTTI\",\"std::declval\",\"std::is_same\",\"type_traits\",\"typeid\"],\"articleSection\":[\"C++\",\"Modern C++\"],\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/www.yazilimperver.com\/index.php\/2021\/02\/28\/haftalik-c-36-decltype-stdis_same-stddeclval\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.yazilimperver.com\/index.php\/2021\/02\/28\/haftalik-c-36-decltype-stdis_same-stddeclval\/\",\"url\":\"https:\/\/www.yazilimperver.com\/index.php\/2021\/02\/28\/haftalik-c-36-decltype-stdis_same-stddeclval\/\",\"name\":\"Haftal\u0131k C++ 36 - decltype, std::is_same, std::declval - Yaz\u0131l\u0131mperver&#039;in D\u00fcnyas\u0131\",\"isPartOf\":{\"@id\":\"https:\/\/www.yazilimperver.com\/#website\"},\"datePublished\":\"2021-02-28T15:41:29+00:00\",\"dateModified\":\"2021-02-28T15:41:29+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/www.yazilimperver.com\/index.php\/2021\/02\/28\/haftalik-c-36-decltype-stdis_same-stddeclval\/#breadcrumb\"},\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.yazilimperver.com\/index.php\/2021\/02\/28\/haftalik-c-36-decltype-stdis_same-stddeclval\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.yazilimperver.com\/index.php\/2021\/02\/28\/haftalik-c-36-decltype-stdis_same-stddeclval\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Ana sayfa\",\"item\":\"https:\/\/www.yazilimperver.com\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Haftal\u0131k C++ 36 &#8211; decltype, std::is_same, std::declval\"}]},{\"@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++ 36 - decltype, std::is_same, std::declval - 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\/2021\/02\/28\/haftalik-c-36-decltype-stdis_same-stddeclval\/","og_locale":"tr_TR","og_type":"article","og_title":"Haftal\u0131k C++ 36 - decltype, std::is_same, std::declval - Yaz\u0131l\u0131mperver&#039;in D\u00fcnyas\u0131","og_description":"C++ 11 ile gelen yeni kabiliyetlere bakmaya devam ediyoruz. Evet, bir ka\u00e7 yaz\u0131 sonra bitecek demi\u015ftim, lakin i\u015fle i\u015fle bitmiyor g\u00fczellikler \ud83d\ude42 Ger\u00e7i fazla da kalmad\u0131. Bug\u00fcn de\u011finece\u011fim kabiliyetlerden ilki &#8220;decltype&#8220;. Asl\u0131nda bu, C++ 11 ile gelen yeni bir anahtar kelime. \u0130smine bak\u0131nca, bir tip tan\u0131mlama gibi gelse de (declare a type?), asl\u0131nda ge\u00e7irilen parametrenin... Continue reading &#8594;","og_url":"https:\/\/www.yazilimperver.com\/index.php\/2021\/02\/28\/haftalik-c-36-decltype-stdis_same-stddeclval\/","og_site_name":"Yaz\u0131l\u0131mperver&#039;in D\u00fcnyas\u0131","article_published_time":"2021-02-28T15:41:29+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":"6 dakika"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.yazilimperver.com\/index.php\/2021\/02\/28\/haftalik-c-36-decltype-stdis_same-stddeclval\/#article","isPartOf":{"@id":"https:\/\/www.yazilimperver.com\/index.php\/2021\/02\/28\/haftalik-c-36-decltype-stdis_same-stddeclval\/"},"author":{"name":"yaz\u0131l\u0131mperver","@id":"https:\/\/www.yazilimperver.com\/#\/schema\/person\/6497f6de4df6ba469748b861a2b3fcdb"},"headline":"Haftal\u0131k C++ 36 &#8211; decltype, std::is_same, std::declval","datePublished":"2021-02-28T15:41:29+00:00","dateModified":"2021-02-28T15:41:29+00:00","mainEntityOfPage":{"@id":"https:\/\/www.yazilimperver.com\/index.php\/2021\/02\/28\/haftalik-c-36-decltype-stdis_same-stddeclval\/"},"wordCount":679,"commentCount":0,"publisher":{"@id":"https:\/\/www.yazilimperver.com\/#\/schema\/person\/6497f6de4df6ba469748b861a2b3fcdb"},"keywords":["C++ 11","decltype","Modern C++","RTTI","std::declval","std::is_same","type_traits","typeid"],"articleSection":["C++","Modern C++"],"inLanguage":"tr","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.yazilimperver.com\/index.php\/2021\/02\/28\/haftalik-c-36-decltype-stdis_same-stddeclval\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.yazilimperver.com\/index.php\/2021\/02\/28\/haftalik-c-36-decltype-stdis_same-stddeclval\/","url":"https:\/\/www.yazilimperver.com\/index.php\/2021\/02\/28\/haftalik-c-36-decltype-stdis_same-stddeclval\/","name":"Haftal\u0131k C++ 36 - decltype, std::is_same, std::declval - Yaz\u0131l\u0131mperver&#039;in D\u00fcnyas\u0131","isPartOf":{"@id":"https:\/\/www.yazilimperver.com\/#website"},"datePublished":"2021-02-28T15:41:29+00:00","dateModified":"2021-02-28T15:41:29+00:00","breadcrumb":{"@id":"https:\/\/www.yazilimperver.com\/index.php\/2021\/02\/28\/haftalik-c-36-decltype-stdis_same-stddeclval\/#breadcrumb"},"inLanguage":"tr","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.yazilimperver.com\/index.php\/2021\/02\/28\/haftalik-c-36-decltype-stdis_same-stddeclval\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/www.yazilimperver.com\/index.php\/2021\/02\/28\/haftalik-c-36-decltype-stdis_same-stddeclval\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Ana sayfa","item":"https:\/\/www.yazilimperver.com\/"},{"@type":"ListItem","position":2,"name":"Haftal\u0131k C++ 36 &#8211; decltype, std::is_same, std::declval"}]},{"@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\/2096","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=2096"}],"version-history":[{"count":11,"href":"https:\/\/www.yazilimperver.com\/index.php\/wp-json\/wp\/v2\/posts\/2096\/revisions"}],"predecessor-version":[{"id":2117,"href":"https:\/\/www.yazilimperver.com\/index.php\/wp-json\/wp\/v2\/posts\/2096\/revisions\/2117"}],"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=2096"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.yazilimperver.com\/index.php\/wp-json\/wp\/v2\/categories?post=2096"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.yazilimperver.com\/index.php\/wp-json\/wp\/v2\/tags?post=2096"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}