C ve C++11 Incelemeler 2


#1

Ilk yazinin devami seklinde devam edelim.

auto keywordu ile ilgili olarak C ve C++ ta bir anlam degisimi var.

auto int x; // Bu kod C dilinde otomatik omurlu demek
int x; // C++ dilinde bu da otomatik omurlu
// yani auto keywordunu kullanmaya gerek kalmiyor
auto x = 10; // iste burada bir anlam degisikligi var.
// auto burada degiskenin veri turunu belirliyor, yani burada int

Sonuc olarak auto artik C++11’de type detection yada declaration type cikarimini derleyici yapiyor demek

C++11’de decltype
Doc icin; http://en.cppreference.com/w/cpp/language/decltype

decltype(exp) x; //x in turu exp neyse o

— — — — — — — — —

C89 da bool turu yok, C++ da var
0 False 1 True
bool 1 byte (hemen hemen her sistemde, char alti olucak)
True False artik birer keyword, bool turunun constantlari

bool x = false; // yada true

C de karsilastirma operatoru turu int, C++ da bool
bool ile diger turler arasi otomatik tur donusumu var.

bool x = 13; // nonzero butun degeler True

Bildigim kadariyla Java ve C# ta boyle degil, donusum yok.
bool dan diger tiplere de donusum var.

bool x = true;
int y = x; // true ise 1, false ise 0 yani burada y = 1

Yani artik bool gereken yerlerde direk olarak bool turunu kullanabiliriz.

— — — — — — — — —

C dilinde ki int ne ise C++ da int ayni (primitive type)

— — — — — — — — —

karakter sabiti konusu
‘A’ C dilinde int, C++ ta char

typeid(‘A’).name()

— — — — — — — — —

bool turu bir tam sayi turudur. int alti turdur. C dilinde integral promotion kurali, tam sayiya yukseltme kurali int ten kucuk turler isleme sokuldugunda int e donusturur.

char c1 = 1, c2 = 3;
std::cout << typeid(c1+c2).name(); // int

— — — — — — — — —

double d = 34.7;
int ival = d; // d degeri 34

C ve C++ da legal bir davranis ama veri kaybi vardir. Bazi dillerde direk veri kaybina sebep olan davranislar sentaks disi yani direk hata.

C++11 de uniform initializer getirildi. Yani bunun anlami veri kaybina yol acabilecek donusumleri gecersiz kilmak. Ornek;

#include <iostream>
int main(int argc, const char * argv[]) {
 // insert code here…
 double d = 34.6;
 int ival{d}; //Type double cannot be narrowed to int in initializer list
 return 0;
}

— — — — — — — — —

C ve C++ dillerinde donusumler iki kategoriye ayriliyor.
Biri implicit type conv. ve explicit type conv.

implicit donusum otomatik donusturme. Soyle anlatayim ival + dval olsun. derleyici bunun icin gecici bir nesne olusturuyor, bu islemi double turunde yapiyor. Yani donusturme otomatik oluyor.

explicit ise operator yardimiyla yapilan donusumlerdir.
i1 ve i2 int turden degiskenler olsun. i1/i2 olarak bolme yapmamaliyiz, int/int sonuc int cikar. 10/3 = 3 olur. C dilinde tur donusturme operaturu ()
Normalde olmasi gereken (double)i1/i2 … Ama artik C++ ta bunuda yapmamamiz gerekiyor. Artik bunun icin yeni 4 tane type cast operatoru geldi. Bu operatorler

static_cast
const_cast
reinterpret_cast
dynamic_cast

Type Cast Operatorleri Makalesi Icin TIKLAYIN

Kaynak: https://medium.com/@keremvatandas/