int i;
char * p = " bu qisqa chiziq.";
i = reinterpret_cast (p); / / a pointer to type int.
cout << i;
return 0;
}
Bu erda operator reinterpret_cast pointer p o'zgartiradi integer qiymati. Ushbu konvertatsiya turdagi asosiy o'zgarishni anglatadi.
Yangi to'rt castoperatorlar bilan odatdagi olib tashlash operatsiyalarini solishtirish
O'quvchilardan biri yuqorida tavsiflangan to'rtta cast operatorining an'anaviy turdagi haydash operatsiyasini to'liq almashtirishi mumkin. Va keyin ular bir savol bo'lishi mumkin: "u har doim yangi vositalarni ishlatish uchun turdagi olib an'anaviy operatsiya o'rniga arziydi?". Aslida, barcha dasturchilar uchun umumiy qoidalar yo'q. Yangi operatorlari boshqasiga ma'lumotlar bir turini olib juda xavfli operatsiya xavfsizligini oshirish uchun yaratilgan beri, ko'p C-dasturchilar ishonch hosil, ular faqat shu maqsadda foydalanish kerak, deb. Va bu erda biror narsaga e'tiroz bildirish qiyin. Boshqa dasturchilar an'anaviy amaliyot turlari ko'p yillar davomida ularga "sadoqat" xizmat olib, chunki, keyin u tark qilish oson emas, deb ishonaman. Misol uchun, oddiy va nisbatan xavfsiz olib turdagi operatsiyalarni amalga oshirish uchun (i / o vazifalarni qo'ng'iroq qachon zarur bo'lganlar kabi o'qish() va yozish(), oldingi bobda tasvirlangan) "yaxshi eski" vositasi juda ma'qul bo'ladi.
Bunga rozi bo'lmaslik qiyin bo'lgan yana bir nuqtai nazar mavjud: polimorf turlarini olib kelish operatsiyalarini amalga oshirishda, albatta, dynamic_cast operatoridan foydalanishga arziydi.
Nomlar joylari C + f da, nisbatan yaqinda paydo bo'ldi. Ular nomlarning nizolarini oldini olish uchun identifikator nomlarini lokalizatsiya qilish uchun mo'ljallangan (pate collisions). C dasturlash muhitida o'zgaruvchilar nomlari aql bovar qilmaydigan bir qator mavjud, vazifalari va sinflar. Nomlar kontseptsiyasini joriy etishdan oldin, bu nomlarning barchasi bir xil global nom maydonida bo'lgan va ko'plab nizolar bo'lgan. Misol uchun, agar siz dasturingizda toupper () funktsiyasini aniqlasangiz, u (uning parametrlari ro'yxatiga qarab) standart toupper kutubxona funktsiyasini o'zgartirishi mumkin (), chunki har ikkala funktsiyaning nomlari bir xil global nom maydonida saqlanadi. Xuddi shu dasturda turli ishlab chiqaruvchilarning funktsiyalari va sinflari kutubxonalari ishlatilganda nom nizolari yuzaga keladi. Bunday holda, bu mumkin — va hatto juda ehtimol - bir kutubxonada belgilangan nomlar bir xil nomlar bilan to'qnashadi, lekin boshqa kutubxonada aniqlanadi.
Barcha muammolar nomlarning bo'shliqlari va namespace kalit so'zlari kontseptsiyasini joriy etish bilan hal qilindi. Ushbu kalit so'z ma'lum bir nom maydonida e'lon qilingan nomlarning ko'rinishini mahalliylashtirishga imkon beradi. Ism maydoni turli xil kontekstlarda bir xil nomdan foydalanish imkonini beradi va ayni paytda nizolar uchun tuproq paydo bo'lmaydi. Ehtimol, san-standart kutubxonasi (C-N-standard library) nomini kiritishdan ko'proq foydalandi. Tilning dastlabki versiyalarida C++ butun kutubxonasi global nom maydonida aniqlandi. Endi C-N kutubxonasi std nomlarining o'z maydonida aniqlanadi, bu esa nom nizolari ehtimolini sezilarli darajada kamaytiradi. Bundan tashqari, dasturda nizolarga olib kelishi mumkin bo'lgan nomlarning ko'rinishi maydonini lokalizatsiya qilish uchun o'z nom joylaringizni yaratishingiz mumkin. Bu o'z sinf kutubxonalarini yoki funktsiyalarini yaratishda ayniqsa muhimdir.
Nomi sohalarda qo'shib so'z namespace global nomi oraliq ajratish imkonini beradi. Aslida, nom maydoni ko'rinish maydonini belgilaydi. Namespace kalit so'zini ishlatishning asosiy shakli quyida keltirilgan: