最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

淺談C++中的mutable和volatile關(guān)鍵字

 更新時(shí)間:2016年06月03日 17:07:49   投稿:jingxian  
下面小編就為大家?guī)硪黄獪\談C++中的mutable和volatile關(guān)鍵字。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧

1.mutable

在C++中,mutable是為了突破const的限制而設(shè)置的。被mutable修飾的變量,將永遠(yuǎn)處于可變的狀態(tài),即使在一個(gè)const函數(shù)中,甚至結(jié)構(gòu)體變量或者類對象為const,其mutable成員也可以被修改。mutable在類中只能夠修飾非靜態(tài)數(shù)據(jù)成員。

#include <iostream> 
using namespace std;
class test
{
  mutable int a;
  int b;
public:
  test(int _a,int _b) :a(_a),b(_b){};
  void fun() const            //fun是const 函數(shù),不能修改類的對象的數(shù)據(jù)成員,但由于a被mutable修飾,可以修改,但不能修改b
  {
    a += b;
  }
  void print()
  {
    cout << a << "," << b << endl;
  }
};

我們知道,如果類的成員函數(shù)不會(huì)改變對象的狀態(tài),那么這個(gè)成員函數(shù)一般會(huì)聲明成const的。但是,有些時(shí)候,我們需要在const的函數(shù)里面修改一些跟類狀態(tài)無關(guān)的數(shù)據(jù)成員,那么這個(gè)數(shù)據(jù)成員就應(yīng)該被mutalbe來修飾。

2.volatile

volatile原意是“易變的”,但這種解釋簡直有點(diǎn)誤導(dǎo)人,應(yīng)該解釋為“直接存取原始內(nèi)存地址”比較合適?!耙鬃儭笔窍鄬εc普通變量而言其值存在編譯器(優(yōu)化功能)未知的改變情況(即不是通過執(zhí)行代碼賦值改變其值的情況),而是因外在因素引起的,如多線程,中斷等。編譯器進(jìn)行優(yōu)化時(shí),它有時(shí)會(huì)取一些值的時(shí)候,直接從寄存器里進(jìn)行存取,而不是從內(nèi)存中獲取,這種優(yōu)化在單線程的程序中沒有問題,但到了多線程程序中,由于多個(gè)線程是并發(fā)運(yùn)行的,就有可能一個(gè)線程把某個(gè)公共的變量已經(jīng)改變了,這時(shí)其余線程中寄存器的值已經(jīng)過時(shí),但這個(gè)線程本身還不知道,以為沒有改變,仍從寄存器里獲取,就導(dǎo)致程序運(yùn)行會(huì)出現(xiàn)未定義的行為。并不是因?yàn)橛胿olatile修飾了的變量就是“易變”了,假如沒有外因,即使用volatile定義,它也不會(huì)變化。而加了volatile修飾的變量,編譯器將不對其相關(guān)代碼執(zhí)行優(yōu)化,而是生成對應(yīng)代碼直接存取原始內(nèi)存地址。

一般說來,volatile用在如下的幾個(gè)地方:

1、中斷服務(wù)程序中修改的供其它程序檢測的變量需要加volatile;

2、多任務(wù)環(huán)境下各任務(wù)間共享的標(biāo)志應(yīng)該加volatile;

3、存儲(chǔ)器映射的硬件寄存器通常也要加volatile說明,因?yàn)槊看螌λ淖x寫都可能有不同意義;

以上這篇淺談C++中的mutable和volatile關(guān)鍵字就是小編分享給大家的全部內(nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • C++?OpenCV實(shí)戰(zhàn)之車道檢測

    C++?OpenCV實(shí)戰(zhàn)之車道檢測

    這篇文章主要介紹了基于C++?OpenCV實(shí)現(xiàn)的車道檢測,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-01-01
  • C語言操作符進(jìn)階教程(表達(dá)式求值隱式類型轉(zhuǎn)換方法)

    C語言操作符進(jìn)階教程(表達(dá)式求值隱式類型轉(zhuǎn)換方法)

    這篇文章主要為大家介紹了C語言操作符進(jìn)階教程(表達(dá)式求值隱式類型轉(zhuǎn)換方法)
    2022-02-02
  • C++11新特性“=default”,“=delete”的使用

    C++11新特性“=default”,“=delete”的使用

    =default、=delete 是C++11的新特性,分別為:顯式缺省(告知編譯器生成函數(shù)默認(rèn)的缺省版本)和顯式刪除(告知編譯器不生成函數(shù)默認(rèn)的缺省版本),本文就來介紹一下如何使用
    2021-05-05
  • C語言實(shí)踐設(shè)計(jì)開發(fā)飛機(jī)游戲

    C語言實(shí)踐設(shè)計(jì)開發(fā)飛機(jī)游戲

    飛機(jī)大戰(zhàn)想必是很多人童年時(shí)期的經(jīng)典游戲,我們依舊能記得抱個(gè)老人機(jī)娛樂的場景,下面這篇文章主要給大家介紹了關(guān)于如何利用C語言寫一個(gè)簡單的飛機(jī)大戰(zhàn)小游戲的相關(guān)資料,需要的朋友可以參考下
    2022-02-02
  • C++ 初始化列表詳解及實(shí)例代碼

    C++ 初始化列表詳解及實(shí)例代碼

    這篇文章主要介紹了C++ 初始化列表詳解及實(shí)例代碼的相關(guān)資料,需要的朋友可以參考下
    2016-12-12
  • C語言簡明講解三目運(yùn)算符和逗號(hào)表達(dá)式的使用

    C語言簡明講解三目運(yùn)算符和逗號(hào)表達(dá)式的使用

    三目運(yùn)算符,又稱條件運(yùn)算符,它是唯一有3個(gè)操作數(shù)的運(yùn)算符,有時(shí)又稱為三元運(yùn)算符。三目運(yùn)算符的結(jié)合性是右結(jié)合的;逗號(hào)表達(dá)式,是c語言中的逗號(hào)運(yùn)算符,優(yōu)先級(jí)別最低,它將兩個(gè)及其以上的式子聯(lián)接起來,從左往右逐個(gè)計(jì)算表達(dá)式,整個(gè)表達(dá)式的值為最后一個(gè)表達(dá)式的值
    2022-04-04
  • 如何通過指針突破C++類的訪問權(quán)限

    如何通過指針突破C++類的訪問權(quán)限

    這篇文章主要介紹了通過指針突破C++類的訪問權(quán)限,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-02-02
  • C++11獲取線程返回值的實(shí)現(xiàn)代碼

    C++11獲取線程返回值的實(shí)現(xiàn)代碼

    這篇文章主要介紹了C++11獲取線程返回值的實(shí)現(xiàn)代碼,需要的朋友可以參考下
    2019-04-04
  • c++11中std::move函數(shù)的使用

    c++11中std::move函數(shù)的使用

    本文主要介紹了c++11中std::move函數(shù)的使用,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-01-01
  • C語言鄰接表建立圖詳解

    C語言鄰接表建立圖詳解

    這篇文章主要介紹了C語言鄰接表建立圖,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-08-08

最新評(píng)論

神池县| 浮山县| 广饶县| 富平县| 绿春县| 宜阳县| 旺苍县| 稷山县| 监利县| 赣榆县| 河北区| 汝阳县| 墨竹工卡县| 陇南市| 六盘水市| 益阳市| 昆山市| 洪雅县| 华阴市| 秭归县| 定安县| 霍林郭勒市| 山丹县| 宜都市| 如皋市| 涞源县| 离岛区| 崇文区| 历史| 奉节县| 建平县| 大庆市| 武定县| 垦利县| 山东| 嵊泗县| 江都市| 万源市| 浦城县| 隆昌县| 磴口县|