C ve C++11 Incelemeler 3


#1

Bu yazi c ve c++11 arasinda ki farkliliklar ve yeni gelen ozelliklerle alakali son makale olucak. Devaminda tamamen C++ ile ilgili yazilarla devam edecek.

— — — — — — — —

NULL C dilinde sembolik bir sabittir.
C++ dilinde null var ama kesinlikle kullanmamaliyiz. C++11 standartlariyla yeni bir keyword eklendi. nullptr

ptr = 0; // C ve C++ gecerli (ptr bir pointer olarak dusunelim)
// Otomatik olarak null donusumu yapicak, bir pointera null atamak istedgimizde 0 yazabiliriz fakat 

C++11 de boyle yapmamaliyiz.
C++11 de nullptr var. nullptr bir adres sabiti. Yani atama su sekilde olmali;

ptr = nullptr;

— — — — — — — —

C++ dilinde mecbur kalmadikca onislemci komutlarini kullanmicaz. Cunku cok tehlikeli durumlar yaratabiliyor define komutu, bunu ilerki yazilarimda deginirim.

— — — — — — — —

null sembolik sabitini bazi C derleyicileri (void*)0 olarak define etmis

int *ptr = (void*)0; // yanlis olur

C++ dilinde void turden T turune otomatik tur donusumu yok.**

— — — — — — — —

C++ da ilk deger verme sentakslari.

int ival = 1;
int ival(1);
int ival = int();
int ival{exp};

— — — — — — — —

Turlerle ilgili farkliliklardan devam edelim,

char str[4] = “KAYA”; //C dilinde legal, C++ da error.. C++ dilinde dizinin boyutu kadar karaktere sahip bir stringle ilk deger veremeyiz. 
// initializer-string for char array is too long

— — — — — — — —

char *p = “Murat”;
*p = “S”; //Boyle bisi yapamayiz, runtime hatasi aliriz. Stringler constant ve readonly dir

Bu madem readonly bir yazi gosterimide yanlis olur, soyle yapmamiz gerekiyor

const char *p = “Murat”; // semantik acidan bu daha dogru

*Yani stringleri asla char p seklinde gostermicez.

— — — — — — — —

C++ dilinde pointerlar hala var ama C dilindeki kadar yogun kullanmicaz. C++ da seviyesi daha yuksek olan referanslari kullanicaz.

C++ dilinde pointer ile primitive turler arasi otomatik tur donusumu yok. C dilinde var.

int *p;
int x = 20;
p = x; // C dilinde yanlis ama legal, int turunden int * turune otomatik tur donusumu gerceklestirir
// C++ dilinde bu tamamen hata, tam sayi degerleri pointer degerlere atayamayiz
// Farkli turden adres atamakta sentaks hatasi
const int x; // C dilinde gecerli, C++ x degiskenine ilk deger vermek zorunlu

Sonuc olarak C++ dilinde pointer degiskenlere adres olmayan bir verinin atanmasi veya farkli turden bir adresin atanmasi sentaks hatasi.

Farkliliklar konusunda bu kadar yeterli, ilerleyen konularda tek tek inceleyecegiz.

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