C++ dilində const_cast operatoru
Salam, dostlar. Bu məqalədə const_cast operatoru haqqında danışacağıq.
C++; const_cast<>() operator
Bir dəyişənin sabitliyini manipulyasiya etməyinizi təmin edir. Normalda sabit (const) olan bir obyektin(dəyişənin) sabit olmayan bir obyektə mənimsədilməsi mümkün deyil. Ancaq const_cast operatoru ilə bu çevirmə mümkün olur.
Sintaksis:
const_cast<yeni tip>(ifadə)
Xüsusilə const_cast sintaksisində “yeni tip” yerində göstərici(tip*), istinad(tip&) və ya tip üzvünün ünvanını özündə saxlayan göstərici tip(&tip::üzv) olmalıdır.
#include
using std::cout;
int main()
{
int i = 3;
const int j = 3;
const int& ci = i;
// int ti = ci; - Xəta!
int ti = const_cast<int&>(ci);
cout << "ti = " << ti << '\n';
// ci = 4 - Xəta!
const_cast<int&>(ci) = 4;
cout << "i = " << i << '\n';
// int* pj = &j; - Xəta!
int* pj = const_cast<int*>(&j);
*pj = 4;
cout << "*pj = " << *pj << '\n';
return 0;
}
const_cast<int&>(ci) = 4; kodunda ci dəyişəni manipulyasiya olunduğu üçün dəyəri dəyişdirilə bilir. int* pj = const_cast<int*>(&j); kodunda isə sabit j dəyişənin ünvanını pj dəyişəninə mənimsədilə bilməsi üçün j dəyişənin ünvanı manipulyasiya olunur.
#include <iostream>
using std::cout;
int main()
{
const int a[3] = { 2, 3, 7 };
int *p = const_cast<int*>(a);
return 0;
}
Bu kod nümunəsində isə sabit massivi manipulyasiya edərək sabit olmayan göstəriciyə mənimsədirik.
const_cast operatorunu proqramçının təyin etdiyi tiplərə də tətbiq etmək olar. Qeyd edim ki, const_cast göstərici funksiyalara tətbiq oluna bilməz. Bu isə onun təhlükəsizliyi qorumasına bir nümunədir.
#include
struct type
{
type() :i(3) { }
void m1(int v) const
{
// this->i = v; // Xəta! this sabit göstəricidir.
const_cast<type*>(this)->i = v;
}
int i;
};
int main()
{
void (type::*mfp)(int) const = &type::m1;
const_cast<void(type::*)(int)>(mfp); // Xəta! const_cast operatoru göstərici funksiyalarda işləmir.
return 0;
}
Ümumiyyətlə, tip çevirməsi operatorları (tip) ifadə və ya tip(ifadə) ilə edilə də bilər. Bu tip çevirmələri C stil tip çevirməsi adlandırırlar. İkinci qeyd olunan isə yanlız C++ dilinə məxsusdur. Və əgər (tip)ifadə formasından istifadə edəcəksinizsə, modifikatorlu tip yazsanız mütləq modifikatorla tipi birgə mötərizəyə almalısınız. Yəni, (long double)(ifadə).
C++ dilinin tip çevirmə operatorları gətirməsinə əsas səbəb kodun oxunaqlılığını artırmağı və bunla bərabər proqramçının səhv etmə ehtimalını azaltmaqdır. Daha ətraflı[Stack Over Flow].
C++ dilində tip çevirməsi üçün const_cast, dynamic_cast, static_cast, reinterpret_cast operatorları vardır.
– Sualınızı və bölüşmək istədiyiniz fikrinizi rəydə qeyd edə bilərsiniz.
Şərhlər ( 1 )
Nahid bəy, təşəkkürlər.