程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> 關於C++ >> C說話 volatile與const同時應用應留意的成績

C說話 volatile與const同時應用應留意的成績

編輯:關於C++

C說話 volatile與const同時應用應留意的成績。本站提示廣大學習愛好者:(C說話 volatile與const同時應用應留意的成績)文章只能為提供參考,不一定能成為您想要的結果。以下是C說話 volatile與const同時應用應留意的成績正文


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可以潤飾左值,潤飾的對象自己也能夠作為左值(例如數組)。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved