欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

C語言 volatile與const同時使用應(yīng)注意的問題

 更新時間:2013年09月17日 08:45:28   作者:  
“volatile”的含義是“請不要做沒譜的優(yōu)化,這個值可能變掉的”,而并非“你可以修改這個值”。因此,它們本來就不是矛盾的

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

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

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

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

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

復(fù)制代碼 代碼如下:

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

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

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

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

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

回答一:沒有問題,例如只讀的狀態(tài)寄存器。它是volatile,因?yàn)樗赡鼙灰庀氩坏降馗淖?;它是const,因?yàn)槌绦虿粦?yīng)該試圖去修改它。volatile和const并不矛盾,只是控制的范圍不一樣,一個在程序本身之外,另一個是程序本身。

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

相關(guān)文章

  • 如何利用C語言實(shí)現(xiàn)最簡單的HTTP服務(wù)器詳解

    如何利用C語言實(shí)現(xiàn)最簡單的HTTP服務(wù)器詳解

    這篇文章主要給大家介紹了關(guān)于如何利用C語言實(shí)現(xiàn)最簡單的HTTP服務(wù)器的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家學(xué)習(xí)或者使用C語言具有一定的參考學(xué)習(xí)價值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-11-11
  • c++多線程之死鎖的發(fā)生的情況解析(包含兩個歸納,6個示例)

    c++多線程之死鎖的發(fā)生的情況解析(包含兩個歸納,6個示例)

    這篇文章主要介紹了c++多線程之死鎖的發(fā)生的情況解析(包含兩個歸納,6個示例),需要的朋友可以參考下
    2018-01-01
  • C語言實(shí)現(xiàn)套接字操作的示例代碼

    C語言實(shí)現(xiàn)套接字操作的示例代碼

    在C語言中,套接字(Socket)是一種進(jìn)行網(wǎng)絡(luò)通信的接口,這篇文章就來和大家介紹一下C語言中是如何進(jìn)行套接字操作的,需要的可以參考一下
    2023-06-06
  • c語言文件讀寫示例(c語言文件操作)

    c語言文件讀寫示例(c語言文件操作)

    這篇文章主要介紹了c語言文件讀寫示例(c語言文件操作),需要的朋友可以參考下
    2014-02-02
  • 深入了解c++11 移動語義與右值引用

    深入了解c++11 移動語義與右值引用

    這篇文章主要介紹了c++ 移動語義與右值引用的相關(guān)資料,幫助大家更好的理解和學(xué)習(xí)c++,感興趣的朋友可以了解下
    2020-08-08
  • Opencv EigenFace人臉識別算法詳解

    Opencv EigenFace人臉識別算法詳解

    這篇文章主要為大家詳細(xì)介紹了Opencv EigenFace人臉識別算法的相關(guān)資料,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-05-05
  • 詳解利用C語言如何實(shí)現(xiàn)簡單的內(nèi)存池

    詳解利用C語言如何實(shí)現(xiàn)簡單的內(nèi)存池

    這篇文章主要給大家介紹了關(guān)于C語言如何實(shí)現(xiàn)簡單的內(nèi)存池的相關(guān)資料,設(shè)計內(nèi)存池的目標(biāo)是為了保證服務(wù)器長時間高效的運(yùn)行,通過對申請空間小而申請頻繁的對象進(jìn)行有效管理,減少內(nèi)存碎片的產(chǎn)生,合理分配管理用戶內(nèi)存,需要的朋友可以參考下
    2021-08-08
  • c++中typename和class的區(qū)別介紹

    c++中typename和class的區(qū)別介紹

    在c++Template中,很多地方都用到了typename與class這兩個關(guān)鍵字,而且好像可以替換,是不是這兩個關(guān)鍵字完全一樣呢?
    2013-03-03
  • 從C語言中讀取Python 類文件對象

    從C語言中讀取Python 類文件對象

    這篇文章主要介紹了如何從C語言中讀取Python 類文件對象,文中講解非常細(xì)致,代碼幫助大家更好的理解和學(xué)習(xí),感興趣的朋友可以了解下
    2020-07-07
  • C++實(shí)現(xiàn)LeetCode(188.買賣股票的最佳時間之四)

    C++實(shí)現(xiàn)LeetCode(188.買賣股票的最佳時間之四)

    這篇文章主要介紹了C++實(shí)現(xiàn)LeetCode(188.買賣股票的最佳時間之四),本篇文章通過簡要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下
    2021-08-08

最新評論