int A = 10;
const int* const a = &A;
++A;
std::cout << "value1:" << A <<std::endl;
std::cout << "value2:" << *a << std::endl;
VS2019編譯后運行結果為
value1: 11
value2: 11
我的理解A = 10,意味著C++在堆疊里有一塊記憶體,暫時成為記憶體X,然后記憶體X里存放了一個int值為110;
然后一個指標a指向記憶體X,該指標前后都有const,也就是說該指標只能指向記憶體X,同時指向的記憶體X為常量
然后*a += 1是無法通過編譯的,編譯器提示錯誤
但通過++A卻成功修改了記憶體X里的值,最后輸出的*a也確實改變了
我想問下C++里,把一個前后都有const的指標,指向一個變數,這種行為到底如何理解?
uj5u.com熱心網友回復:
所有限制都是針對a和A沒什么關系
uj5u.com熱心網友回復:
const修飾哪個部分,哪個部分就不能修改比如
int A=10;
int B=15;
int* const a = &A;
//a = &B; //const修飾a,所以a不能改
*a = B; //可以改
int A=10;
int B=15;
const int* a = &A;
//*a = B; //const 修飾*,所以*不能改
a = &B; //可以改
int A=10;
int B=15;
const int* const a = &A;
//a = &B; //const即修飾*,又修飾a,那就兩個部分都不能改
//*a = B;
const只是針對于它修飾的那個變數做訪問限制,不影響他變數的訪問權限,所以其他變數還是能正常操作。
都加上const是為了讓該該變數只讀,不讓它擁有可寫的權限,這樣可以防止通過該變數去破壞原來的變數
uj5u.com熱心網友回復:
const a只是限制指向A不能變化,至于A的值變不變,它不管轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/201886.html
標籤:C++ 語言
