麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 編程 > C > 正文

C語言 volatile與const同時使用應注意的問題

2020-01-26 15:52:02
字體:
來源:轉載
供稿:網友

const和volatile放在一起的意義在于:

(1)本程序段中不能對a作修改,任何修改都是非法的,或者至少是粗心,編譯器應該報錯,防止這種粗心;

(2)另一個程序段則完全有可能修改,因此編譯器最好不要做太激進的優化。

“const”含義是“請做為常量使用”,而并非“放心吧,那肯定是個常量”。
“volatile”的含義是“請不要做沒譜的優化,這個值可能變掉的”,而并非“你可以修改這個值”。
因此,它們本來就不是矛盾的。

const修飾的變量不允許這里修改不代表不允許別處修改,比如:

復制代碼 代碼如下:

int i = 5;
const int* p = &i;
*p = 6; // 不可以;
i = 7; // 完全可以,而且那個“const”的“*p”也跟著變成了7。

對于非指針非引用的變量,const volatile同時修飾的意義確實不大。個人覺得。

需要明白“volatile”的含義并非是“non-const”。所以他們才可以放在一起。
在C++語言中,const沒有反義詞,如果一個變量沒有const修飾,那它本身就是const的反義詞,而并非加上volatile才是const的反義詞。

兩者同時修飾一個對象的典型情況,是用于驅動中訪問外部設備的只讀寄存器。

留一個問題:const volatile int i=10;這行代碼有沒有問題?如果沒有,那 i 到底是什么 屬性?

回答一:沒有問題,例如只讀的狀態寄存器。它是volatile,因為它可能被意想不到地改變;它是const,因為程序不應該試圖去修改它。volatile和const并不矛盾,只是控制的范圍不一樣,一個在程序本身之外,另一個是程序本身。

回答二:沒問題,const和volatile這兩個類型限定符不矛盾。const表示(運行時)常量語義:被const修飾的對象在所在的作用域無法進行修改操作,編譯器對于試圖直接修改const對象的表達式會產生編譯錯誤。volatile表示“易變的”,即在運行期對象可能在當前程序上下文的控制流以外被修改(例如多線程中被其它線程修改;對象所在的存儲器可能被多個硬件設備隨機修改等情況):被volatile修飾的對象,編譯器不會對這個對象的操作進行優化。一個對象可以同時被const和volatile修飾,表明這個對象體現常量語義,但同時可能被當前對象所在程序上下文意外的情況修改。另外,LS錯誤,const可以修飾左值,修飾的對象本身也可以作為左值(例如數組)。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表

圖片精選

主站蜘蛛池模板: www国产成人免费观看视频,深夜成人网 | 国产精品久久久久无码av | xxx18hd18hd日本 | 国产精品久久久久久久久久久天堂 | 日本在线免费观看视频 | 斗罗破苍穹在线观看免费完整观看 | 男女羞羞视频在线观看免费 | 国产毛片自拍 | 99精品视频在线 | 成人在线97 | 羞羞羞网站 | 国产午夜精品久久久久 | 久久久久久久久久一本门道91 | 视频一区 中文字幕 | 视频一区二区三区中文字幕 | 国产免费片 | 国产午夜精品一区二区三区四区 | 成人在线免费小视频 | 国产女厕一区二区三区在线视 | 欧美毛片 | www.com香蕉| 欧美a区 | 国产91九色 | 国产亚洲精品久久久久久久 | 国产69精品久久久久孕妇黑 | 一级成人欧美一区在线观看 | 久久人体 | 欧美成人午夜 | 亚洲第一成网站 | 九九精品在线观看视频 | 久草成人在线 | 亚洲卡通动漫在线观看 | 羞羞的视频在线免费观看 | 色妞视频男女视频 | 视频一区二区在线观看 | 亚洲成人免费视频在线 | 成人毛片免费播放 | 在线观看中文字幕av | 亚州精品在线视频 | 国产成人视屏 | 精品偷拍久久 |