Чӣ гуна метавон арзиши тағйирёбандаи, ки бо калимаи калидии const эълон шудааст, тағйир дод?
sobes.tech AI
Ҷавоб аз AI
C/C++-да, const калид сўзи билан эълон қилинган ўзгарувчи назарий жиҳатдан, бошланғичдан кейин ўзгартирилмайди. Аммо, бу чекловни ўтказишнинг усуллари мавжуд, гўёки улар тавсия этилмайди ва номуайян хулқ-атворларга олиб келиши мумкин:
- Турни ўзгартириш билан кўрсаткичдан фойдаланиш:
constкўрсаткични нон-const кўрсаткичга ўтказиш ва қийматни ундан ўzgartirish мумкин.
const int x = 10;
int* p = (int*)&x;
*p = 20; // x қийматини ўзгартириш
-
Классларда
mutableдан фойдаланиш: Агарconstкласс объектга қўлланилса,mutableбилан эълон қилинган майдонлар, ҳаттоconstметодларда ҳам ўзгартирилиши мумкин. -
const_castорқали C++-да:
const int x = 10;
int& y = const_cast<int&>(x);
y = 20;
Аммо, ҳақиқатан ҳам, read-only хотирада ёки бошқа тарзда эълон қилинган const ўзгарувчини ўзгартириш номуайян хулқ-атворларга олиб келади.
Шунинг учун, const ўзгарувчининг қийматини тўғридан-тўғри ўзгартириш мумкин эмас, ва ўтказиш усулларини катта эҳтиёт билан қўллаш керак, фақат натижаларини тўлиқ тушунган ҳолда.