const int a[10] = ;
int i =0;
for(i = 0; i < 5; i++)
a[i] = a[i] +1; // 陣列a裡面內容不能能修改
但若用指標指向陣列位址
int *p = a ;
for(i = 0; i < 5; i++)
p[i] = p[i] +1; // 可以修改
這是因為const是對編譯器來說的,
如果你能騙過編譯器,幹什麼都行
const就是乙個掛羊頭賣豬肉的偽君子「常量」
在c++裡,private資料成員依然能通過指標訪問 (類基址+相對偏移)
但用::運算子不行
const int a = 3;
a = 4; //不能直接賦值
再看:const int a = 3;
int *p = &a;
*p = 4; //可以賦值,走後門了咯
作用域int main()
int a = 2;printf("%d\n",a); //輸出2,而且編譯器不會認為變數重定義而報錯 }
每個變數只在其作用域內有效
const和volatile 可以同時宣告乙個變數嗎?
void f()
{const int count = 5;
int i = 0;
for(i=0; i大家看一下 我們是不是可以確認 這個迴圈一定做5次呢?
現代編譯器對於這個情況一定是5次 ,在編譯的時候 編譯器就覺得都是const的了 在這個函式中又不可能改變值了 直接用5代替了
const只是表示變數唯讀,不能出現在賦值符號左邊,防止被意外修改,並且編譯器一定會優化,不會每次去記憶體取值。這時候如果外部事件(如中斷服務程式)改變了這個變數的記憶體值,那麼編譯器優化就不會又反應,導致錯誤
boost 作用域陣列
1 boost scoped array 2 特點 1 作用域陣列必須通過動態分配的陣列來初始化 2 作用域陣列的析構函式使用delete操作符來釋放所包含的物件 3 boost scoped array類過載了操作符operator 4 boost scoped array也提供了get 和res...
作用域 作用域鏈
理解 就是一塊 地盤 乙個 段所在的區域 它是靜態的 相對於上下文物件 在編寫 時就確定了 分類全域性作用域 函式作用域 沒有塊作用域 es6有了 作用隔離變數,不同作用域下同名變數不會有衝突 區別1全域性作用域之外,每個函式都會建立自己的作用域,作用域在函式定義時就已經確定了。而不是在函式呼叫時 ...
Python作用域 全域性作用域 區域性作用域
在python中,每個函式都會建立乙個作用域。pythonistas也可能稱函式擁有它們自己的命名空間 namespace 這意味著當在函式體裡遇到變數名 時,python首先在該函式的命名空間中查詢,python包含了一些讓我們檢視命名空間的函式。讓我們寫乙個簡單的函式來探查一下local和glo...