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.

 

Səs: +30. Bəyənilsin Zəifdir

Müəllif: Nahid Camallı

Şərhlər ( 1 )

  1. Nahid bəy, təşəkkürlər.

Şərh yazın