{"id":255,"date":"2018-01-28T14:24:41","date_gmt":"2018-01-28T14:24:41","guid":{"rendered":"http:\/\/www.yazilimperver.com\/?p=255"},"modified":"2019-02-13T06:38:33","modified_gmt":"2019-02-13T06:38:33","slug":"modern-c-3-uniform-initialization-overridefinal-defaultdelete-constexpr-vb","status":"publish","type":"post","link":"https:\/\/www.yazilimperver.com\/index.php\/2018\/01\/28\/modern-c-3-uniform-initialization-overridefinal-defaultdelete-constexpr-vb\/","title":{"rendered":"Modern C++ (3): Uniform Initialization, override\/final, default\/delete, constexpr, vb."},"content":{"rendered":"<p>Bir di\u011fer Modern C++ yaz\u0131m ile sizlerle birlikteyim \ud83d\ude42 \u00d6nceki Modern C++ yaz\u0131lar\u0131ma a\u015fa\u011f\u0131daki ba\u011flant\u0131lardan ula\u015fabilirsiniz.<\/p>\n<p><span style=\"text-decoration: underline; color: #ff0000;\"><a href=\"http:\/\/www.yazilimperver.com\/index.php\/2017\/12\/23\/modern-c-nullptr-enum-siniflari-range-based-donguler-auto\/\">Modern C++ (1): nullptr, enum s\u0131n\u0131flar\u0131, range-based d\u00f6ng\u00fcler, auto<\/a><\/span><\/p>\n<p><span style=\"text-decoration: underline; color: #ff0000;\"><a href=\"http:\/\/www.yazilimperver.com\/index.php\/2017\/12\/23\/modern-c-2-c-11-yenilikleri\/\">Modern C++ (2): C++ 11 Yenilikleri<\/a><\/span><\/p>\n<p>Bu yaz\u0131m\u0131zda C++ 11 ile gelen yenilikleri incelemeye devam edece\u011fiz. C++11 ile gelen b\u00fct\u00fcn yenilikler i\u00e7in yukar\u0131daki ikinci yaz\u0131ma ula\u015fabilirsiniz. Bu yaz\u0131mda di\u011fer yenilikler kadar b\u00fcy\u00fck de\u011fi\u015fiklikler olmasa da genel ilklendirme ve tan\u0131mlama yakla\u015f\u0131mlar\u0131n\u0131 de\u011fi\u015ftirdi\u011fi i\u00e7in \u00f6\u011frenilmesinde fayda oldu\u011funu d\u00fc\u015f\u00fcnd\u00fc\u011f\u00fcm bir tak\u0131m yap\u0131lardan bahsedece\u011fim. Yaz\u0131m\u0131n sonuna do\u011fru ise daha ufak \u00e7apta olan de\u011fi\u015fikliklerden bahsedec\u011fim.<\/p>\n<h3><em><strong><span style=\"color: #3366ff;\">1. Initialization Lists\/Uniform Initialization<\/span><\/strong><\/em><\/h3>\n<p>C++ 11 ile gelen en \u00f6nemli \u00f6zelliklerden birisi de veri yap\u0131lar\u0131\/tiplerinin ortak bir \u015fekilde ilklendirilmesine y\u00f6nelik sunulan &#8220;Uniform Initialization&#8221; olarak adland\u0131r\u0131lan mekanizmad\u0131r. Peki C++ 03&#8217;de durum neydi? \u015eimdi h\u0131zl\u0131ca daha \u00f6nceki duruma ve s\u0131k\u0131nt\u0131lara bakal\u0131m, bu anlamda \u00fc\u00e7 temel eksiklik bulunmaktayd\u0131 bunlar:<\/p>\n<ul>\n<li>S\u0131n\u0131f \u00fcyesi dizilerin ilklendirilememesi,<\/li>\n<li>Konteynerlar\u0131n (STL konteynerleri dahil) ilklendirilmesine ili\u015fkin standart bir yolun olmamas\u0131,<\/li>\n<li>Dinamik olarak olu\u015fturulan POD veri yap\u0131lar\u0131n\u0131n ilklendirilememesi.<\/li>\n<\/ul>\n<pre class=\"lang:c++ decode:true \">class C\r\n{\r\n    int x[100];\r\n    C(); \/\/ x i el ile ilklendirme d\u0131\u015f\u0131nda standart bir y\u00f6ntem yok\r\n};\r\n\r\n\/\/ buff dizinin elemanlar\u0131n\u0131 ilklendirmenin bir y\u00f6ntemi yok\r\nchar *buff=new char[1024];\r\n\r\n\/\/ STL konteynerlerin standart bir ilklendirme y\u00f6ntemi yok\r\nvector &lt;string&gt; colors;\r\ncolors.push_back(\"Beyaz\");\r\ncolors.push_back(\"Siyah\");\r\ncolors.push_back(\"Mavi\");<\/pre>\n<p>Bunlar\u0131nda yan\u0131nda C++ 03 \u00e7ok farkl\u0131 ve ortak olmayan ilklendirme y\u00f6ntemleri i\u00e7eriyordu (temel tiplerin ilklendirilmesi, s\u0131n\u0131f ve nesnelerin &#8220;data member&#8221; lar\u0131n\u0131n ilklendirilmesi, dizi ve karma\u015f\u0131k veri yap\u0131lar\u0131n ilklendirilmesi). \u015eimdi h\u0131zl\u0131ca bunlara bakal\u0131m:<\/p>\n<ul>\n<li>Basit veri yap\u0131lar\u0131n\u0131n ilklendirilmesi i\u00e7in (=) operat\u00f6r\u00fc kullan\u0131lmakta:<\/li>\n<\/ul>\n<pre class=\"lang:c++ decode:true\">unsigned int n = 0U;\r\nvoid *p = 0;\r\nchar c = 'A';\r\n\r\n\/\/ Ayr\u0131ca () operat\u00f6r\u00fc de kullan\u0131labilir\r\nunsigned int n(0U); \/\/ Yukar\u0131daki ile ayn\u0131\r\ndouble dbl(0.5);<\/pre>\n<ul>\n<li>Constructor lar\u0131 tan\u0131mlanm\u0131\u015f s\u0131n\u0131flar i\u00e7in constructor&#8217;lar arac\u0131l\u0131\u011f\u0131 ile member initialization list, nesnelerin ilklendirilmesi i\u00e7in ise &#8221; ( ) &#8221; operat\u00f6r\u00fc kullan\u0131lmaktayd\u0131.<\/li>\n<\/ul>\n<pre class=\"lang:c++ decode:true\">\/\/C++03 initialization of classes and objects\r\nstruct ExampleStruct\r\n{\r\n      explicit ExampleStruct(int n, int m) \r\n             : x(n), y(m){} \r\nprivate:\r\n      int x, y;\r\n};\r\n\r\n\r\n\/\/ Nesne ilklendirilmesi i\u00e7in parantezler kullan\u0131lmakta\r\nExampleStruct s(0,1); \r\n\r\n\/\/ Derleme hatas\u0131 (\u00f6zel olarak constructor tan\u0131mland\u0131\u011f\u0131 i\u00e7in hata al\u0131nmakta)\r\n\/\/ error: converting to 'ExampleStruct' from initializer list would use explicit constructor 'ExampleStruct::ExampleStruct(int, int)'\r\nExampleStruct s2={0, 1};\r\n\r\n\/\/ Derleme hatas\u0131\r\n\/\/ error: conversion from 'int' to non-scalar type 'ExampleStruct' requested\r\nExampleStruct s2=(0, 1);<\/pre>\n<ul>\n<li>POD diziler ve karma\u015f\u0131k veri yap\u0131lar\u0131 i\u00e7in ise &#8221; { } &#8221; kullan\u0131lmaktayd\u0131.<\/li>\n<\/ul>\n<pre class=\"lang:c++ decode:true\">\/\/C++03: dizi ilklendirilmesi\r\nint c1[2]={0,2};\r\n\r\n\/\/ Char dizisine \u00f6zel ilklendirme\r\nchar c2[]=\"message\";\r\n\r\n\/\/ Char dizisinin standart bir \u015fekilde ilklendirilmesi\r\nchar c3[]={'m','e','s','s','a','g','e','\\0'};\r\n\r\nstruct S\r\n{\r\n int a,b;\r\n};\r\n\r\n\/\/ Karma\u015f\u0131k veri yap\u0131s\u0131n\u0131n ilklendirilmesi\r\n\/\/ \u00f6zel olarak constructor tan\u0131mlanMAd\u0131\u011f\u0131 i\u00e7in hata al\u0131nMaMakta\r\nS s={0,1};<\/pre>\n<p>Evet gelelim C++ 11 ile gelen yeni &#8220;Uniform Initialization&#8221;&#8216;a. C++ 11 yeni ilklendirme y\u00f6ntemi ile ile her bir veri tipinin (POD de\u011fi\u015fkeni, kullan\u0131c\u0131 tan\u0131m constructor i\u00e7eren s\u0131n\u0131flar,\u00a0 POD dizi, dinamik olarak olu\u015fturulan dizi ve nihayetinde STL konteynerlar\u0131) ilklendirilmesi i\u00e7in ortak bir yakla\u015f\u0131m sunmaktad\u0131r. Bu yakla\u015f\u0131m &#8221; { } &#8221; ilklendirmesi olarak ta ifade edilebiliyor ve ilklendirme i\u00e7in bu kullan\u0131l\u0131yor.<\/p>\n<pre class=\"lang:c++ decode:true \">\/\/ C++11 parantez-ilklendirme \u00f6rnekleri\r\nint a{0};\r\nstring s{\"hello\"};\r\n\r\n\/\/ Copy constructor i\u00e7in de kullan\u0131labilir\r\nstring s2{s}; \r\nvector &lt;string&gt; colors{\"Beyaz\", \"Mavi\", \"Siyah\"};\r\n\r\nmap&lt;string, string&gt; team\r\n { {\"Ahmet\", \"Ya\u015f:26\"},\r\n  {\"Mehmet\", \"Ya\u015f:28\"}};\r\n\r\ndouble* pd= new double [3] {0.5, 1.2, 12.99};\r\n\r\nclass C\r\n{\r\n   int x[4];\r\npublic:\r\n   \/\/ \u00dcye dizi ilklendirmesi\r\n   C(): x{0,1,2,3} {}\r\n};\r\n\r\n\/\/ C++11 varsay\u0131lan ilklendirme \u00f6rnekleri\r\nint n{}; \/\/ s\u0131f\u0131r ile ilklendirme n 'in de\u011feri 0\r\nint *p{}; \/\/ p ye nullptr atan\u0131r\r\ndouble d{}; \/\/ d 0.0 ile ilklendirilir\r\nchar s[12]{}; \/\/ b\u00fct\u00fcn 12 karakter de '\\0' olarak ilklendirilir\r\nstring s{}; \/\/ string s; tan\u0131m\u0131 ile ayn\u0131 (default constructor)\r\nchar *p=new char [5]{}; \/\/ b\u00fct\u00fcn 5 karakter de '\\0' olarak ilklendirilir\r\n<\/pre>\n<p>Yukar\u0131daki \u00f6rneklerde &#8220;={}&#8221; yerine &#8220;{}&#8221;\u00a0 kullan\u0131m\u0131na dikkat edecek olursan\u0131z, ilki C++03 de kullan\u0131llan yakla\u015f\u0131m. Bunun yan\u0131nda &#8220;{}&#8221; bo\u015f parantez kullan\u0131m\u0131 da varsay\u0131lan ilklendirme anlam\u0131na gelmektedir (POD ve basit veri tipleri i\u00e7in 0 ile ilklendirme, s\u0131n\u0131flar ve karma\u015f\u0131k veri yap\u0131lar\u0131 i\u00e7in default constructor).<\/p>\n<p>Bunlar ile birlikte kendi s\u0131n\u0131flar\u0131n\u0131za ve fonksiyonlar\u0131n\u0131za da \u00f6zellikle STL konteynerlerinin ilklendirilmesi benzer bir ilklendirme kazand\u0131rmak i\u00e7in C++ std::initializer_list template s\u0131n\u0131f\u0131n\u0131 sunuyor. Bunun sayesinde s\u0131n\u0131flar\u0131n\u0131z\u0131 ilklendirme listeleri ile olu\u015fturabilirsiniz. A\u015fa\u011f\u0131da \u00f6rnek bir say\u0131 liste s\u0131n\u0131f\u0131n\u0131 bu \u015fekilde nas\u0131l ilklendirebilece\u011fimize bakal\u0131m.<\/p>\n<pre class=\"lang:c++ decode:true\">#include &lt;iostream&gt;\r\n#include &lt;vector&gt;\r\n\r\nclass CNumberList\r\n{\r\npublic:\r\n    CNumberList(const <strong>std::initializer_list<\/strong>&lt;int&gt; &amp;v) \r\n   {\r\n        for (auto itm : v) \r\n        {\r\n            mVec.push_back(itm);\r\n        }\r\n    }\r\n\r\n    void print() \r\n    {\r\n\tfor (auto itm : mVec) \r\n        {\r\n\t    std::cout &lt;&lt; itm &lt;&lt; \" \";\r\n\t}\r\n    }\r\nprivate:\r\n    std::vector&lt;int&gt; mVec;\r\n};\r\n\r\nint main()\r\n{\r\n    CNumberList m = { 1, 2, 3, 4 };\r\n    m.print();  \/\/ 1 2 3 4\r\n\r\n    return 0;\r\n}<\/pre>\n<h3><span style=\"color: #3366ff;\"><em><strong>2. Override ve Final anahtar kelimeleri<\/strong><\/em><\/span><\/h3>\n<p>\u00d6zellikle C++ &#8220;inheritance&#8221; mekanizmas\u0131 i\u00e7in bu anahtar kelime eklenmi\u015ftir. Bu anahtar kelime derleyiciye bunun eklendi\u011fi metodun bir \u00fcst s\u0131n\u0131fta virtual olarak ayn\u0131 \u015fekilde tan\u0131mlan\u0131p\/tan\u0131mlanmad\u0131\u011f\u0131n\u0131 kontrol etmesini sa\u011flar. C++ 03 ve \u00f6nceki C++ larda a\u015fa\u011f\u0131daki gibi durumlar kolay bir \u015fekilde g\u00f6zden ka\u00e7abilmekteydi.<\/p>\n<pre class=\"lang:c++ decode:true \">\/\/ C++03 Hali\r\nclass Base\r\n{\r\n    virtual void f(int);\r\n};\r\n\r\nclass Derived : public Base\r\n{\r\n    \/\/ Derleyici bu tan\u0131mlamaya hata vermez ve bunun yeni bir tan\u0131mlama oldu\u011funu kabul eder\r\n    virtual void f(float);\r\n};<\/pre>\n<p>Burada asl\u0131nda ama\u00e7 bir \u00fcst s\u0131n\u0131fta tan\u0131mlanm\u0131\u015f olan f metodunu tan\u0131mlamakt\u0131 ama metodun tan\u0131m\u0131 farkl\u0131 oldu\u011fu i\u00e7in ikinci bir sanal metot tan\u0131mland\u0131. A\u015fa\u011f\u0131da ise yeni kullan\u0131m var ve bu durumda derleyici hata vercektir.<\/p>\n<pre class=\"lang:c++ decode:true\">\/\/ C++11 hali\r\nclass Base\r\n{\r\n    virtual void f(int);\r\n};\r\n\r\nclass Derived : public Base\r\n{\r\n    \/\/ derleyici bir \u00fcst s\u0131nfa bakacak ve benzer bir tan\u0131m g\u00f6remeyece\u011fi i\u00e7in hata verecek\r\n    virtual void f(float) <strong>override<\/strong>;\r\n};<\/pre>\n<p>&#8220;Inheritance&#8221; ile ilgili eklenen bir di\u011fer anahtar kelime ise &#8220;final&#8221; d\u0131r. Bu anahtar kelime ile i\u015faretlenen s\u0131n\u0131f ve metotlar alt s\u0131n\u0131flar taraf\u0131ndan tekrar tan\u0131mlanmas\u0131n\u0131n \u00f6n\u00fcne ge\u00e7iyor. Baz\u0131 durumlar di\u011fer s\u0131n\u0131flar\u0131n geli\u015ftirdi\u011fimiz s\u0131n\u0131flar\u0131 inheritance \u00fczerinden de\u011fi\u015ftirmeleri istemeyebiliriz (kripto, sisteml servisleri, vb.). Normal \u015fartlarda asl\u0131nda vector ve list benzeri s\u0131n\u0131flar da bu tarz s\u0131n\u0131flar i\u00e7erisine dahil edilebilir. \u0130\u015fte bu ama\u00e7la a\u015fa\u011f\u0131daki gibi s\u0131n\u0131flar\u0131n\u0131z tan\u0131mlay\u0131p bunlar\u0131n di\u011fer s\u0131n\u0131flar taraf\u0131ndan inheritance yolu ile de\u011fi\u015ftirilmesinin \u00f6n\u00fcne ge\u00e7ebilirsiniz. Benzer \u015fekilde metotlar da bu \u015fekilde tan\u0131mlanarak, bu metotlar\u0131n di\u011fer s\u0131n\u0131flar taraf\u0131ndan ge\u00e7ersiz k\u0131l\u0131nmas\u0131n\u0131n (override) \u00f6n\u00fcne ge\u00e7ilebilir.<\/p>\n<pre class=\"lang:c++ decode:true\">\/\/ Hi\u00e7 bir s\u0131n\u0131f A s\u0131n\u0131f\u0131ndan inheritance ile t\u00fcretilemez\r\nclass A <strong>final<\/strong>\r\n{\r\n    virtual void f(int);\r\n};\r\n\r\nclass B\r\n{\r\n    virtual void f(); \r\n};\r\n\r\nclass C : public B\r\n{\r\n \/\/ Hi\u00e7 bir s\u0131n\u0131f f() metodunu ge\u00e7ersiz k\u0131lamaz\/tekrar tan\u0131mlayamaz\r\n virtual void f() override <strong>final<\/strong>; \r\n};\r\n\r\nclass D : public B \r\n{ \r\n     \/\/ Derleyici hatas\u0131. C s\u0131n\u0131f\u0131 i\u00e7erisinde bu metot final olarak i\u015faretlenmi\u015f\r\n     virtual void f() override;\r\n};\r\n<\/pre>\n<h3><span style=\"color: #3366ff;\"><em><strong>3. Default ve Delete anahtar kelimeleri<\/strong><\/em><\/span><\/h3>\n<p>C++ 11 \u00f6ncesinde herhangi bir s\u0131n\u0131f i\u00e7erisinde e\u011fer bir &#8220;constructor&#8221; tan\u0131mlar iseniz, derleyici sizin i\u00e7in &#8220;default constructor&#8221; tan\u0131mlamaz ve a\u015fa\u011f\u0131daki durumda derleme hatas\u0131 al\u0131rs\u0131n\u0131z.<\/p>\n<pre class=\"lang:c++ decode:true\">class A\r\n{\r\npublic:\r\n    A(int a){};\r\n};\r\n\r\n\/\/ Derleme hatas\u0131\r\nA a;<\/pre>\n<p>\u0130\u015fte &#8220;default&#8221; anahtar kelimesi ekleyerek derleyicinin bizim i\u00e7in &#8220;default constructor&#8221; olu\u015fturmaya zorlayabiliriz.<\/p>\n<pre class=\"lang:c++ decode:true\">class A\r\n{\r\npublic:\r\n    A(int a){};\r\n    A() = <strong>default<\/strong>;\r\n};\r\n\r\n\/\/ Derleme hatas\u0131 almay\u0131z\r\nA a;<\/pre>\n<p>&#8220;delete&#8221; anahtar kelimesi ile de metotlar\u0131n tan\u0131mlanmas\u0131 ve \u00e7a\u011fr\u0131lmas\u0131n\u0131 engelleyebiliriz. \u00d6rne\u011fin:<\/p>\n<pre class=\"lang:c++ decode:true\">class A\r\n{\r\npublic:\r\n    A(int a){};\r\n};\r\n\r\n\/\/ Yukar\u0131daki tan\u0131mlama ile a\u015fa\u011f\u0131daki ifadelerin hepsi ge\u00e7erlidir\r\nA a(10);     \/\/ OK\r\nA b(3.14);   \/\/ OK  3.14, 3'e d\u00f6n\u00fc\u015ft\u00fcr\u00fcl\u00fcr (bunu istemeyebiliriz)\r\na = b;       \/\/ OK  Derleyeci tarafindan otomatik olu\u015fturukan atama operatoru ca\u011fr\u0131l\u0131r<\/pre>\n<p>Yukar\u0131daki \u00f6rne\u011fin ikinci ve \u00fc\u00e7\u00fcnc\u00fc ifadeleri engellemek isteyebiliriz. A\u015fa\u011f\u0131daki tan\u0131mlama ile buun \u00f6n\u00fcne ge\u00e7mi\u015f oluyoruz.<\/p>\n<pre class=\"lang:c++ decode:true\">class A\r\n{\r\npublic:\r\n    A(int a){};\r\n    A(short) = delete;                \/\/ Short ile olu\u015fturulmas\u0131n\u0131n \u00f6n\u00fcne ge\u00e7elim\r\n    A(double) = delete;               \/\/ Otomatik d\u00f6n\u00fc\u015f\u00fcm engellendi \r\n    A(const A&amp;) = delete; \/\/ Copy contructor engellendi\r\n    A&amp; operator=(const A&amp;) = delete;  \/\/ Atama operatoru engellendi\r\n};<\/pre>\n<h3><span style=\"color: #3366ff;\"><em><strong>4. constexpr<\/strong><\/em><\/span><\/h3>\n<p>constexpr anahtar kelimesi derleyici taraf\u0131ndan derleme zaman\u0131nda hesaplama yap\u0131lmas\u0131 i\u00e7in eklenmi\u015f olan bir anahtar kelimedir. constexpr ile sadece de\u011fi\u015fkenler de\u011fil ayn\u0131 zamanda metotlar ve dahi s\u0131n\u0131f metotlar\u0131 da derleme zaman\u0131nda hesaplanacak diye belirtilebilmektedir. Bu anlamda nesneler ile kullan\u0131m\u0131 const, metotlar ile kullan\u0131m\u0131 da asl\u0131nda inline kullan\u0131m\u0131na benzerdir. Burada yine Uniform Initialization gibi tek bir y\u00f6ntem kullan\u0131lmas\u0131 amac\u0131 da g\u00fcd\u00fclm\u00fc\u015ft\u00fcr.<\/p>\n<pre class=\"lang:c++ decode:true \">constexpr int square(int x) \r\n{\r\n  return x * x;\r\n}\r\n\r\nint square2(int x) \r\n{\r\n  return x * x;\r\n}\r\n\r\n\/\/ square(2) derleme zaman\u0131nda hesaplan\u0131r\r\nint a = square(2);\r\n\r\n\/\/ \u00e7al\u0131\u015fma zaman\u0131nda ilgili metot \u00e7a\u011fr\u0131l\u0131r\r\nint b = square2(2); \r\n\r\nconst int x = 123;\r\n\r\n\/\/ Hata -- 'y' constexpr de\u011fi\u015fkeni bir constexpr ile ilklendirilmelidir\r\nconstexpr const int&amp; y = x; \r\n\r\n\/\/ S\u0131n\u0131flar i\u00e7in kullan\u0131m \u00f6rne\u011fi\r\nclass Complex \r\n{\r\npublic:\r\n  constexpr Complex(double r, double i) : re(r), im(i) { }\r\n  constexpr double real() { return re; }\r\n  constexpr double imag() { return im; }\r\n\r\nprivate:\r\n  double re;\r\n  double im;\r\n};\r\n\r\nconstexpr Complex I(0, 1);<\/pre>\n<p>constexpr ile tan\u0131mlanacak de\u011fi\u015fkenler a\u015fa\u011f\u0131daki ko\u015fullar\u0131 kar\u015f\u0131lamal\u0131d\u0131r:<\/p>\n<ul>\n<li><a href=\"http:\/\/www.enseignement.polytechnique.fr\/informatique\/INF478\/docs\/Cpp\/en\/cpp\/concept\/LiteralType.html\"><em>LiteralType<\/em><\/a><em>\u00a0<\/em>olmal\u0131d\u0131r,<\/li>\n<li>Hemen olu\u015fturulmal\u0131 ya da bir de\u011fer atanmal\u0131d\u0131r,<\/li>\n<li>Constructor&#8217;a ya da ilgili de\u011fi\u015fkene at\u0131lacak de\u011ferler sadece literal de\u011ferleri, constexpr de\u011fi\u015fkenler ve metotlar olabilir,<\/li>\n<li>Nesne olu\u015fturulmas\u0131nda kullan\u0131lacak olan constructor,\u00a0<em>constexpr constructor\u00a0<\/em>gereksinimlerini kar\u015f\u0131lamal\u0131d\u0131r. Explicit constructor olmas\u0131 durumunda constexpr olarak tan\u0131mlanmal\u0131d\u0131r.<\/li>\n<\/ul>\n<p>constexpr ile tan\u0131mlanacak olan metotlar a\u015fa\u011f\u0131daki ko\u015fullar\u0131 kar\u015f\u0131lamal\u0131d\u0131r:<\/p>\n<ul>\n<li>virtual olmamal\u0131d\u0131r,<\/li>\n<li>D\u00f6n\u00fc\u015f de\u011feri ve var ise parametreleri LiteralType olmal\u0131d\u0131r,<\/li>\n<li>Fonksiyon tan\u0131m\u0131 ya deleted\/default olarak i\u015faretlenmeli ya da sadece a\u015fa\u011f\u0131dakileri i\u00e7ermelidir,\n<ul>\n<li>null ifadeleri,<\/li>\n<li>static_assert tan\u0131mlamalar\u0131,<\/li>\n<li>class veya enum d\u0131\u015f\u0131ndaki typedef ya da\u00a0<em>alias<\/em> tan\u0131mlamalar\u0131,<\/li>\n<li>using tan\u0131mlamalar\u0131 ve komutlar\u0131,<\/li>\n<li>tek bir return kullan\u0131m\u0131<\/li>\n<\/ul>\n<\/li>\n<li>Fonksiyon tan\u0131m\u0131 a\u015fa\u011f\u0131dakileri i\u00e7ermemelidir\n<ul>\n<li>asm tan\u0131mlamas\u0131,<\/li>\n<li>goto ifadeleri,<\/li>\n<li>try-catch blo\u011fu,<\/li>\n<li>Literal olmayan, statik veya thread veri tan\u0131mlamalar.<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<p>constexpr ile tan\u0131mlanacak olan constructorlar a\u015fa\u011f\u0131daki ko\u015fullar\u0131 kar\u015f\u0131lamal\u0131d\u0131r:<\/p>\n<ul>\n<li>Parametreleri LiteralType olmal\u0131d\u0131r,<\/li>\n<li>Virtual base s\u0131n\u0131flar olmamal\u0131d\u0131r,<\/li>\n<li>try-catch blo\u011fu olmamal\u0131d\u0131r,<\/li>\n<li>Constructor tan\u0131m\u0131 ya deleted\/default olarak i\u015faretlenmeli ya da sadece a\u015fa\u011f\u0131dakileri i\u00e7ermelidir,\n<ul>\n<li>null ifadeleri,<\/li>\n<li>static_assert tan\u0131mlamalar\u0131,<\/li>\n<li>class veya enum d\u0131\u015f\u0131ndaki typedef ya da\u00a0<em>alias<\/em> tan\u0131mlamalar\u0131,<\/li>\n<li>using tan\u0131mlamalar\u0131 ve komutlar\u0131,<\/li>\n<\/ul>\n<\/li>\n<li>B\u00fct\u00fcn base s\u0131n\u0131flar ve statik olmayan \u00fcyeler ilklendirilmelidir. Kullan\u0131lan b\u00fct\u00fcn constructorlar da constexpr olmal\u0131d\u0131r.<\/li>\n<\/ul>\n<p>Daha detayl\u0131 ko\u015fullar i\u00e7in <a href=\"http:\/\/en.cppreference.com\/w\/cpp\/language\/constexpr\">ConstExpr <\/a>sayfas\u0131na ba\u015fvurabilirsiniz.<\/p>\n<h3><span style=\"color: #3366ff;\"><em><strong>5. Statik olmayan s\u0131n\u0131f verilerinin ilklendirilmesi<\/strong><\/em><\/span><\/h3>\n<p>C++ 11 ile art\u0131k statik olmayan s\u0131n\u0131f \u00fcyeleri deklare edildikleri yerde ilklendirilebilecekler.\u00a0 Bu sayede daha temiz (construtor k\u00fc\u00e7\u00fclecek) ve okunabilir kodlar elde edebileceksiniz.<\/p>\n<div class=\"highlight highlight-source-c++\">\n<pre class=\"lang:c++ decode:true \">\/\/ C++11 s\u0131n\u0131f \u00fcye verilerinin ilklendirilmesi\r\nclass Human\r\n{\r\n    Human() : age(), name(\"Ahmet\"), ptr(0) {}\r\n  private:\r\n    unsigned age;\r\n    std::string name;\r\n    int* ptr;\r\n};\r\n\r\n\/\/ C++ 11 yeni ilklendirme yakla\u015f\u0131m\u0131. Daha az ve okunabilir kod\r\nclass Human \r\n{\r\n  private:\r\n    unsigned age{0}; \r\n    std::string name = \"Ahmet\"; \r\n    int* ptr = nullptr;\r\n};<\/pre>\n<\/div>\n<h3><span style=\"color: #3366ff;\"><em><strong>6. Sa\u011f Template Ayra\u00e7 Bo\u015fluklar\u0131<\/strong><\/em><\/span><\/h3>\n<p><a id=\"user-content-right-angle-brackets\" class=\"anchor\" href=\"https:\/\/github.com\/AnthonyCalandra\/modern-cpp-features\/blob\/master\/CPP11.md#right-angle-brackets\" aria-hidden=\"true\"><\/a>C++ 11 ile art\u0131k typedef tan\u0131mlamalar\u0131nda garip bo\u015fluklar b\u0131rakman\u0131za gerek kalm\u0131yor.<\/p>\n<div class=\"highlight highlight-source-c++\">\n<pre class=\"lang:c++ decode:true \">\/\/ aralar\u0131ndaki bo\u015fluklar\u0131 silerseniz derleme hatas\u0131 al\u0131rs\u0131n\u0131z :)\r\ntypedef std::map&lt;int, std::map &lt;int, std::map &lt;int, int&gt; &gt; &gt; cpp98LongTypedef;\r\ntypedef std::map&lt;int, std::map &lt;int, std::map &lt;int, int&gt;&gt;&gt;   cpp11LongTypedef;<\/pre>\n<h3><span style=\"color: #3366ff;\"><em><strong>7. Inline Namespaces<\/strong><\/em><\/span><\/h3>\n<p>C++ 11 ile eklenen bir di\u011fer \u00f6zellikte inline namespaces. Inline namespaces temelde size varsay\u0131lan olarak bir namespace i\u00e7erisindeki tan\u0131mlamalar\u0131n otomatik olarak bir \u00fcst namespace ile sunulma\u0131sna olanak sa\u011fl\u0131yor. Bu da baz\u0131 kabiliyetlerin \u00f6zelle\u015fmesi ve versiyonlama i\u015fini kolayla\u015ft\u0131r\u0131yor. \u00d6rne\u011fin:<\/p>\n<pre class=\"lang:c++ decode:true\">namespace Networking \r\n{\r\n    namespace V1 \r\n    {\r\n        class TCPSocket;\r\n    }\r\n     \r\n    \/\/ Inline tan\u0131mlamas\u0131 ile birlikte Networking namespaceini kullanan herkes ayn\u0131 \r\n    \/\/ zamanda V2 ile gelen tan\u0131mlamalara da ula\u015fabiliyor olacak.\r\n    <strong>inline<\/strong> namespace V2\r\n    {\r\n        class TCPSocket;\r\n    }\r\n \r\n    class UDPSocket;\r\n}\r\n\r\n\/\/ \u00d6zellikle V1\/V2 belirtilmedi\u011fi i\u00e7in Networking::V2::TCPSocket kullan\u0131lacak\r\nNetworking::TCPSocket *t;      \r\n\r\n\/\/ \u00d6zellikle belirtildi\u011fi i\u00e7in Networking::V1::TCPSocket kullan\u0131lacak\r\nNetworking::V1::TCPSocket *t2;      \r\n\r\n\/\/ \u00d6zellikle belirtildi\u011fi i\u00e7in Networking::V2::TCPSocket kullan\u0131lacak\r\nNetworking::V2::TCPSocket *t3; \r\n \r\nusing namespace Networking;\r\n\/\/ Networking::V2::TCPSocket\r\nTCPSocket *t4;   \r\n\r\n\/\/ Networking::V1::TCPSocket           \r\nV1::TCPSocket *t5; \r\n\r\n\/\/ Networking::V2::TCPSocket         \r\nV2::TCPSocket *t6;<\/pre>\n<p>\u00d6zellikle framework ve k\u00fct\u00fcphane geli\u015ftiricilerin hangi namespacelerin otomatik olarak varsay\u0131lan i\u015faretlenmesine olanak sa\u011flayacak bir mekanizma. A\u011fer bu tarz bir yaz\u0131l\u0131m geli\u015ftirmiyor iseniz \u00e7ok kullanma ihtiyac\u0131 duymayabilirsiniz.<\/p>\n<h3><span style=\"color: #3366ff;\"><em><strong>8. Delegating Constructors<\/strong><\/em><\/span><\/h3>\n<p>C++ 11 ile birlikte art\u0131k ilklendirme listesi i\u00e7erisinde ayn\u0131 s\u0131n\u0131fa ait di\u011fer constructorlar\u0131 \u00e7a\u011f\u0131rabilirsiniz. Bu sayede yine kod azalt\u0131larak okunabilirlik artt\u0131r\u0131labilir. foo.foo; <span class=\"pl-c\">\/\/ == 0<\/span><\/p>\n<pre class=\"lang:c++ decode:true\">struct Foo \r\n{\r\n  int foo;\r\n  Foo(int foo) : foo(foo) {}\r\n  \/\/ Bir daha bu constructor i\u00e7erisinde foo'yu doldurmam\u0131za gerek yok\r\n  Foo() : <strong>Foo(0)<\/strong> {}\r\n};\r\n\r\nFoo foo{};\r\nfoo.foo; \/\/ == 0<\/pre>\n<h3><span style=\"color: #3366ff;\"><em><strong>9. static_assert<\/strong><\/em><\/span><\/h3>\n<p>Bu yaz\u0131mda sizlere bahsedece\u011fim son kabiliyet ise static_assert. static_assert ile derleme zaman\u0131nda kontroller yapabilirsiniz.<\/p>\n<pre class=\"lang:c++ decode:true \">#include &lt;assert.h&gt;\r\nint main(void)\r\n{\r\n    static_assert(2 + 2 == 4, \"2+2 isn't 4\");\r\n\r\n    static_assert(sizeof(int) &lt; sizeof(char),\r\n                 \"this program requires that int is less than char\"); \r\n    constexpr int x = 0;\r\n    constexpr int y = 1;\r\n    static_assert(x == y, \"x != y\");\r\n}<\/pre>\n<p>&nbsp;<\/p>\n<p>Evet uzun bir yaz\u0131n\u0131n daha sonuna geldik. Bu yaz\u0131 ile birlikte bir ka\u00e7 konu d\u0131\u015f\u0131nda C++ 11 yeniliklerinin de bir \u00e7o\u011funun \u00fczerinden ge\u00e7mi\u015f olduk, geriye &#8220;Smart Pointer&#8221;, &#8220;Lambda Expressions&#8221; ve &#8220;R-Value References&#8221; gibi baba konular kald\u0131. Bir de tabi STL&#8217;e gelen yenilikler var.<\/p>\n<p>Muhtemelen bir sonraki yaz\u0131m\u0131 da &#8220;Smart Pointer&#8221; &#8216;lara bak\u0131yor olaca\u011f\u0131z.<\/p>\n<p>G\u00f6r\u00fc\u015fmek dile\u011fiyle&#8230;<\/p>\n<\/div>\n","protected":false},"excerpt":{"rendered":"<p>Bir di\u011fer Modern C++ yaz\u0131m ile sizlerle birlikteyim \ud83d\ude42 \u00d6nceki Modern C++ yaz\u0131lar\u0131ma a\u015fa\u011f\u0131daki ba\u011flant\u0131lardan ula\u015fabilirsiniz. Modern C++ (1): nullptr, enum s\u0131n\u0131flar\u0131, range-based d\u00f6ng\u00fcler, auto Modern C++ (2): C++ 11 Yenilikleri Bu yaz\u0131m\u0131zda C++ 11 ile gelen yenilikleri incelemeye devam edece\u011fiz. C++11 ile gelen b\u00fct\u00fcn yenilikler i\u00e7in yukar\u0131daki ikinci yaz\u0131ma ula\u015fabilirsiniz. Bu yaz\u0131mda di\u011fer yenilikler&#8230; <a class=\"more-link\" href=\"https:\/\/www.yazilimperver.com\/index.php\/2018\/01\/28\/modern-c-3-uniform-initialization-overridefinal-defaultdelete-constexpr-vb\/\">Continue reading <span class=\"meta-nav\">&#8594;<\/span><\/a><\/p>\n","protected":false},"author":1,"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,1],"tags":[67,68,13,47,46,69,66,70,42,65,71,64],"class_list":["post-255","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-c","category-modern-c","category-uncategorized","tag-default","tag-delete","tag-c","tag-c-0x","tag-c-11","tag-constexpr","tag-final","tag-inline-namespace","tag-modern-c","tag-override","tag-static_assert","tag-uniform-initialization"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v21.0 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Modern C++ (3): Uniform Initialization, override\/final, default\/delete, constexpr, vb. - 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\/2018\/01\/28\/modern-c-3-uniform-initialization-overridefinal-defaultdelete-constexpr-vb\/\" \/>\n<meta property=\"og:locale\" content=\"tr_TR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"[:tr]Modern C++ (3): Uniform Initialization, override\/final, default\/delete, constexpr, vb.[:en]Modern C++ (3): Uniform Initialization, override\/final, default\/delete, constexpr, etc.[:] - Yaz\u0131l\u0131mperver&#039;in D\u00fcnyas\u0131\" \/>\n<meta property=\"og:description\" content=\"Bir di\u011fer Modern C++ yaz\u0131m ile sizlerle birlikteyim \ud83d\ude42 \u00d6nceki Modern C++ yaz\u0131lar\u0131ma a\u015fa\u011f\u0131daki ba\u011flant\u0131lardan ula\u015fabilirsiniz. Modern C++ (1): nullptr, enum s\u0131n\u0131flar\u0131, range-based d\u00f6ng\u00fcler, auto Modern C++ (2): C++ 11 Yenilikleri Bu yaz\u0131m\u0131zda C++ 11 ile gelen yenilikleri incelemeye devam edece\u011fiz. C++11 ile gelen b\u00fct\u00fcn yenilikler i\u00e7in yukar\u0131daki ikinci yaz\u0131ma ula\u015fabilirsiniz. Bu yaz\u0131mda di\u011fer yenilikler... Continue reading &#8594;\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.yazilimperver.com\/index.php\/2018\/01\/28\/modern-c-3-uniform-initialization-overridefinal-defaultdelete-constexpr-vb\/\" \/>\n<meta property=\"og:site_name\" content=\"Yaz\u0131l\u0131mperver&#039;in D\u00fcnyas\u0131\" \/>\n<meta property=\"article:published_time\" content=\"2018-01-28T14:24:41+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2019-02-13T06:38:33+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=\"12 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\/2018\/01\/28\/modern-c-3-uniform-initialization-overridefinal-defaultdelete-constexpr-vb\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/www.yazilimperver.com\/index.php\/2018\/01\/28\/modern-c-3-uniform-initialization-overridefinal-defaultdelete-constexpr-vb\/\"},\"author\":{\"name\":\"yaz\u0131l\u0131mperver\",\"@id\":\"https:\/\/www.yazilimperver.com\/#\/schema\/person\/30ee263812776c4abb84418d028b5ef4\"},\"headline\":\"Modern C++ (3): Uniform Initialization, override\/final, default\/delete, constexpr, vb.\",\"datePublished\":\"2018-01-28T14:24:41+00:00\",\"dateModified\":\"2019-02-13T06:38:33+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/www.yazilimperver.com\/index.php\/2018\/01\/28\/modern-c-3-uniform-initialization-overridefinal-defaultdelete-constexpr-vb\/\"},\"wordCount\":1496,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/www.yazilimperver.com\/#\/schema\/person\/6497f6de4df6ba469748b861a2b3fcdb\"},\"keywords\":[\"=default\",\"=delete\",\"c++\",\"C++ 0x\",\"C++ 11\",\"constexpr\",\"final\",\"Inline Namespace\",\"Modern C++\",\"override\",\"static_assert\",\"Uniform Initialization\"],\"articleSection\":[\"C++\",\"Modern C++\",\"Uncategorized\"],\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/www.yazilimperver.com\/index.php\/2018\/01\/28\/modern-c-3-uniform-initialization-overridefinal-defaultdelete-constexpr-vb\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.yazilimperver.com\/index.php\/2018\/01\/28\/modern-c-3-uniform-initialization-overridefinal-defaultdelete-constexpr-vb\/\",\"url\":\"https:\/\/www.yazilimperver.com\/index.php\/2018\/01\/28\/modern-c-3-uniform-initialization-overridefinal-defaultdelete-constexpr-vb\/\",\"name\":\"[:tr]Modern C++ (3): Uniform Initialization, override\/final, default\/delete, constexpr, vb.[:en]Modern C++ (3): Uniform Initialization, override\/final, default\/delete, constexpr, etc.[:] - Yaz\u0131l\u0131mperver&#039;in D\u00fcnyas\u0131\",\"isPartOf\":{\"@id\":\"https:\/\/www.yazilimperver.com\/#website\"},\"datePublished\":\"2018-01-28T14:24:41+00:00\",\"dateModified\":\"2019-02-13T06:38:33+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/www.yazilimperver.com\/index.php\/2018\/01\/28\/modern-c-3-uniform-initialization-overridefinal-defaultdelete-constexpr-vb\/#breadcrumb\"},\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.yazilimperver.com\/index.php\/2018\/01\/28\/modern-c-3-uniform-initialization-overridefinal-defaultdelete-constexpr-vb\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.yazilimperver.com\/index.php\/2018\/01\/28\/modern-c-3-uniform-initialization-overridefinal-defaultdelete-constexpr-vb\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Ana sayfa\",\"item\":\"https:\/\/www.yazilimperver.com\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Modern C++ (3): Uniform Initialization, override\/final, default\/delete, constexpr, vb.\"}]},{\"@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\/\"}},{\"@type\":\"Person\",\"@id\":\"https:\/\/www.yazilimperver.com\/#\/schema\/person\/30ee263812776c4abb84418d028b5ef4\",\"name\":\"yaz\u0131l\u0131mperver\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"tr\",\"@id\":\"https:\/\/www.yazilimperver.com\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/1fba597722a6cfbfac6eb03b348b1f5065b583004abb13322f432c3f00276b3f?s=96&d=wp_user_avatar&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/1fba597722a6cfbfac6eb03b348b1f5065b583004abb13322f432c3f00276b3f?s=96&d=wp_user_avatar&r=g\",\"caption\":\"yaz\u0131l\u0131mperver\"},\"description\":\"\u00d6\u011frenmeyi ve payla\u015fmay\u0131 seven bir yaz\u0131l\u0131mperver :)\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"[:tr]Modern C++ (3): Uniform Initialization, override\/final, default\/delete, constexpr, vb.[:en]Modern C++ (3): Uniform Initialization, override\/final, default\/delete, constexpr, etc.[:] - 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\/2018\/01\/28\/modern-c-3-uniform-initialization-overridefinal-defaultdelete-constexpr-vb\/","og_locale":"tr_TR","og_type":"article","og_title":"[:tr]Modern C++ (3): Uniform Initialization, override\/final, default\/delete, constexpr, vb.[:en]Modern C++ (3): Uniform Initialization, override\/final, default\/delete, constexpr, etc.[:] - Yaz\u0131l\u0131mperver&#039;in D\u00fcnyas\u0131","og_description":"Bir di\u011fer Modern C++ yaz\u0131m ile sizlerle birlikteyim \ud83d\ude42 \u00d6nceki Modern C++ yaz\u0131lar\u0131ma a\u015fa\u011f\u0131daki ba\u011flant\u0131lardan ula\u015fabilirsiniz. Modern C++ (1): nullptr, enum s\u0131n\u0131flar\u0131, range-based d\u00f6ng\u00fcler, auto Modern C++ (2): C++ 11 Yenilikleri Bu yaz\u0131m\u0131zda C++ 11 ile gelen yenilikleri incelemeye devam edece\u011fiz. C++11 ile gelen b\u00fct\u00fcn yenilikler i\u00e7in yukar\u0131daki ikinci yaz\u0131ma ula\u015fabilirsiniz. Bu yaz\u0131mda di\u011fer yenilikler... Continue reading &#8594;","og_url":"https:\/\/www.yazilimperver.com\/index.php\/2018\/01\/28\/modern-c-3-uniform-initialization-overridefinal-defaultdelete-constexpr-vb\/","og_site_name":"Yaz\u0131l\u0131mperver&#039;in D\u00fcnyas\u0131","article_published_time":"2018-01-28T14:24:41+00:00","article_modified_time":"2019-02-13T06:38:33+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":"12 dakika"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.yazilimperver.com\/index.php\/2018\/01\/28\/modern-c-3-uniform-initialization-overridefinal-defaultdelete-constexpr-vb\/#article","isPartOf":{"@id":"https:\/\/www.yazilimperver.com\/index.php\/2018\/01\/28\/modern-c-3-uniform-initialization-overridefinal-defaultdelete-constexpr-vb\/"},"author":{"name":"yaz\u0131l\u0131mperver","@id":"https:\/\/www.yazilimperver.com\/#\/schema\/person\/30ee263812776c4abb84418d028b5ef4"},"headline":"Modern C++ (3): Uniform Initialization, override\/final, default\/delete, constexpr, vb.","datePublished":"2018-01-28T14:24:41+00:00","dateModified":"2019-02-13T06:38:33+00:00","mainEntityOfPage":{"@id":"https:\/\/www.yazilimperver.com\/index.php\/2018\/01\/28\/modern-c-3-uniform-initialization-overridefinal-defaultdelete-constexpr-vb\/"},"wordCount":1496,"commentCount":0,"publisher":{"@id":"https:\/\/www.yazilimperver.com\/#\/schema\/person\/6497f6de4df6ba469748b861a2b3fcdb"},"keywords":["=default","=delete","c++","C++ 0x","C++ 11","constexpr","final","Inline Namespace","Modern C++","override","static_assert","Uniform Initialization"],"articleSection":["C++","Modern C++","Uncategorized"],"inLanguage":"tr","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.yazilimperver.com\/index.php\/2018\/01\/28\/modern-c-3-uniform-initialization-overridefinal-defaultdelete-constexpr-vb\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.yazilimperver.com\/index.php\/2018\/01\/28\/modern-c-3-uniform-initialization-overridefinal-defaultdelete-constexpr-vb\/","url":"https:\/\/www.yazilimperver.com\/index.php\/2018\/01\/28\/modern-c-3-uniform-initialization-overridefinal-defaultdelete-constexpr-vb\/","name":"[:tr]Modern C++ (3): Uniform Initialization, override\/final, default\/delete, constexpr, vb.[:en]Modern C++ (3): Uniform Initialization, override\/final, default\/delete, constexpr, etc.[:] - Yaz\u0131l\u0131mperver&#039;in D\u00fcnyas\u0131","isPartOf":{"@id":"https:\/\/www.yazilimperver.com\/#website"},"datePublished":"2018-01-28T14:24:41+00:00","dateModified":"2019-02-13T06:38:33+00:00","breadcrumb":{"@id":"https:\/\/www.yazilimperver.com\/index.php\/2018\/01\/28\/modern-c-3-uniform-initialization-overridefinal-defaultdelete-constexpr-vb\/#breadcrumb"},"inLanguage":"tr","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.yazilimperver.com\/index.php\/2018\/01\/28\/modern-c-3-uniform-initialization-overridefinal-defaultdelete-constexpr-vb\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/www.yazilimperver.com\/index.php\/2018\/01\/28\/modern-c-3-uniform-initialization-overridefinal-defaultdelete-constexpr-vb\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Ana sayfa","item":"https:\/\/www.yazilimperver.com\/"},{"@type":"ListItem","position":2,"name":"Modern C++ (3): Uniform Initialization, override\/final, default\/delete, constexpr, vb."}]},{"@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\/"}},{"@type":"Person","@id":"https:\/\/www.yazilimperver.com\/#\/schema\/person\/30ee263812776c4abb84418d028b5ef4","name":"yaz\u0131l\u0131mperver","image":{"@type":"ImageObject","inLanguage":"tr","@id":"https:\/\/www.yazilimperver.com\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/1fba597722a6cfbfac6eb03b348b1f5065b583004abb13322f432c3f00276b3f?s=96&d=wp_user_avatar&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/1fba597722a6cfbfac6eb03b348b1f5065b583004abb13322f432c3f00276b3f?s=96&d=wp_user_avatar&r=g","caption":"yaz\u0131l\u0131mperver"},"description":"\u00d6\u011frenmeyi ve payla\u015fmay\u0131 seven bir yaz\u0131l\u0131mperver :)"}]}},"_links":{"self":[{"href":"https:\/\/www.yazilimperver.com\/index.php\/wp-json\/wp\/v2\/posts\/255","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\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.yazilimperver.com\/index.php\/wp-json\/wp\/v2\/comments?post=255"}],"version-history":[{"count":11,"href":"https:\/\/www.yazilimperver.com\/index.php\/wp-json\/wp\/v2\/posts\/255\/revisions"}],"predecessor-version":[{"id":934,"href":"https:\/\/www.yazilimperver.com\/index.php\/wp-json\/wp\/v2\/posts\/255\/revisions\/934"}],"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=255"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.yazilimperver.com\/index.php\/wp-json\/wp\/v2\/categories?post=255"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.yazilimperver.com\/index.php\/wp-json\/wp\/v2\/tags?post=255"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}