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

C++11 上下文關(guān)鍵字的具體實(shí)踐

 更新時(shí)間:2023年06月14日 10:36:58   作者:洛克希德馬丁  
本文主要介紹了C++11 上下文關(guān)鍵字的具體實(shí)踐,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧

前言

熟悉C++11的朋友都知道,C++有大概83個(gè)左右的關(guān)鍵字。

一、關(guān)鍵字是什么?

關(guān)鍵字(keyword)屬于保留字,是整個(gè)語(yǔ)言范圍內(nèi)預(yù)先保留的標(biāo)識(shí)符。每個(gè)C++關(guān)鍵字都有特殊的含義。經(jīng)過(guò)預(yù)處理后,關(guān)鍵字從預(yù)處理記號(hào)(preprocessing-token)中區(qū)別出來(lái),剩下的標(biāo)識(shí)符作為記號(hào)(token),用于聲明對(duì)象、函數(shù)、類型、命名空間等。不能聲明與關(guān)鍵字同名的標(biāo)識(shí)符

二、使用步驟

1.簡(jiǎn)單例子

這里舉一些簡(jiǎn)單例子,比如定義變量使用的類型關(guān)鍵字:int,float,double這些。

代碼如下(示例):

#include <iostream>
int main(){
?? ?int a = 0;
?? ?float b = 1.0;
?? ?double c = 2.0;
?? ?return 0;
}

這里main使用的是不帶參數(shù)的版本。其他的關(guān)鍵字有各自的用法,由于C++語(yǔ)法體系比較復(fù)雜,只針對(duì)一些特殊的做說(shuō)明。

像int這種內(nèi)置類型不需要引用名字空間

2.錯(cuò)誤例子

關(guān)鍵字是保留字,不能用來(lái)當(dāng)變量名和函數(shù)名或者諸如名字空間名字、類名等等命名。說(shuō)白了編譯器正式通過(guò)解析關(guān)鍵字來(lái)理解語(yǔ)法結(jié)構(gòu),如果允許濫用關(guān)鍵字無(wú)疑會(huì)讓編譯器無(wú)法正常工作。

代碼如下(示例):

#include <iostream>
int main(){
?? ?int int = 0;
?? ?float float = 1.0;
?? ?double double = 2.0;
?? ?return 0;
}

這里把int、float和double當(dāng)作了普通變量名,IDE會(huì)報(bào)錯(cuò)提醒你,編譯也無(wú)法通過(guò)。不過(guò)這并不意味著變量名中不能出現(xiàn)關(guān)鍵字的影子,請(qǐng)看下面的例子:

#include <iostream>
int main(){
?? ?int _int = 0;
?? ?float _float = 1.0;
?? ?double _double = 2.0;
?? ?return 0;
}

加了下劃線的關(guān)鍵字就不是關(guān)鍵字了,就是普通變量了,可以正常編譯。

注意:不要濫用雙下劃線,有些內(nèi)置宏是以雙下劃線開(kāi)頭的。比如:__cplusplus,建議這種帶關(guān)鍵字的變量名還是要少用或者不用,以免出現(xiàn)錯(cuò)誤。

三、特殊關(guān)鍵字

終于還是到重頭戲了,關(guān)鍵字本身的使用沒(méi)什么好大書(shū)特書(shū)的,需要注意的上面已經(jīng)說(shuō)的夠詳細(xì)了。其他關(guān)鍵字的使用方法只要參考C++11的語(yǔ)法就行了。

接下來(lái)說(shuō)幾個(gè)特殊的“關(guān)鍵字”

1.export關(guān)鍵字

這個(gè)是C++11名副其實(shí)的關(guān)鍵字,只不過(guò)是個(gè)“未使用關(guān)鍵字”,暫時(shí)沒(méi)有被賦予特殊的含義。但是,你仍然不能濫用它,比如:命名一個(gè)變量,還是和上面的所有關(guān)鍵字一樣編譯不通過(guò)。

2.override關(guān)鍵字

這個(gè)關(guān)鍵字比較特殊,它是用在“運(yùn)行時(shí)多態(tài)”的“上下文關(guān)鍵字”。注意這個(gè)上下文關(guān)鍵字,它有特殊含義,而又跟其它關(guān)鍵字不太一樣。你比如,最顯著的差別就是它可以被用來(lái)命名變量,而且可以編譯通過(guò)。

#include <iostream>
int main(){
?? ?int override = 0;
?? ?return 0;
}

可以編譯通過(guò),使用起來(lái)也沒(méi)問(wèn)題。這個(gè)是歷史遺留問(wèn)題,因?yàn)樽钤绲臅r(shí)候還沒(méi)有override這個(gè)關(guān)鍵字,之前的老代碼中程序員大量使用這個(gè)命名變量,所以后來(lái)C++標(biāo)準(zhǔn)就把它定義為上下文關(guān)鍵字了。意思就是只有在特殊的場(chǎng)景下才有特殊含義,這個(gè)特殊含義就是“派生類復(fù)寫(xiě)基類的virtual方法”,這個(gè)override關(guān)鍵字甚至可以不用寫(xiě),只不過(guò)IDE可能會(huì)給你個(gè)warning。

請(qǐng)看下面的例子:

#include <iostream>
class X {
public:
? ? virtual void print() const;
};
void X::print() const {
? ? std::cout << "X::print()" << std::endl;
}
class Y : public X {
public:
? ? void print() const;
};
void Y::print() const {
? ? X::print();
? ? std::cout << "Y::print()" << std::endl;
}

上面的寫(xiě)法就是不帶override。但是,實(shí)際上是Y復(fù)寫(xiě)了X的print方法。建議不要這么寫(xiě),加上override作為標(biāo)識(shí),讓人一眼就能看出來(lái)這個(gè)方法是復(fù)寫(xiě)的基類方法!

請(qǐng)看完美寫(xiě)法:

#include <iostream>
class X {
public:
? ? virtual void print() const;
};
void X::print() const {
? ? std::cout << "X::print()" << std::endl;
}
class Y : public X {
public:
? ? void print() const override;
};
void Y::print() const {
? ? X::print(); //這個(gè)如果不需要可以去掉
? ? std::cout << "Y::print()" << std::endl;
}

仔細(xì)觀察能發(fā)現(xiàn)區(qū)別,const無(wú)論聲明還是定義都是要加上的,override只需要在聲明中加上,不需要再定義上加上,因?yàn)樗?ldquo;不是函數(shù)的一部分”。

重要的一點(diǎn):override必須放在函數(shù)聲明的最后位置,比如上面的例子,必須放在const后面。否則,編譯無(wú)法通過(guò)。

我們今天不是來(lái)討論運(yùn)行時(shí)多態(tài)的用法的,所以更復(fù)雜的運(yùn)行時(shí)多態(tài)本篇文章不討論,我們只討論“上下文關(guān)鍵字”和“保留關(guān)鍵字”之間的差別。

3.final關(guān)鍵字

用法和override不一樣,不過(guò)同樣可以作為一個(gè)變量名而被編譯通過(guò)。
沒(méi)錯(cuò),final也是“上下文關(guān)鍵字”。final主要用在“阻止進(jìn)一步派生”,看起來(lái)和override是相反的功能,其實(shí)不是這樣的,無(wú)論有沒(méi)有override這個(gè)關(guān)鍵字,派生行為都是現(xiàn)實(shí)存在的一種語(yǔ)法;而final恰巧能夠阻止進(jìn)一步派生。

請(qǐng)看代碼:

#include <iostream>
class X {
public:
? ? virtual void print() const;
? ? virtual void test() const final;
};
void X::print() const {
? ? std::cout << "X::print()" << std::endl;
}
void X::test() const {
? ? std::cout << "X::test()" << std::endl;
}
class Y : public X {
public:
? ? void print() const override;
? ? void test() const override;//這句編譯不通過(guò)
};
void Y::print() const {
? ? X::print();
? ? std::cout << "Y::print()" << std::endl;
}

仍然是延續(xù)剛才的代碼,print已經(jīng)override了,我們不用管。X的test標(biāo)記為final,在Y中嘗試override就會(huì)報(bào)錯(cuò),原因是test被標(biāo)記為final。

這個(gè)時(shí)候你有兩個(gè)選擇:1就是將final去掉;2就是將Y的test代碼去掉。兩種選擇都可以編譯通過(guò)。

和override一樣,final也是只出現(xiàn)在函數(shù)聲明里,不會(huì)出現(xiàn)在函數(shù)定義里,要不然編譯不通過(guò)。

特別說(shuō)明:final不能修飾純虛函數(shù),因?yàn)榧兲摵瘮?shù)必須被復(fù)寫(xiě)。

另外:virtual出現(xiàn)在函數(shù)聲明的前面,overide出現(xiàn)在函數(shù)聲明的后面,順序不能搞錯(cuò)。如果virtual和overide在派生類的函數(shù)中同時(shí)出現(xiàn),只需要保留override即可。如果override和final同時(shí)出現(xiàn),只需要保留final即可。

總結(jié)

到此這篇關(guān)于C++11 上下文關(guān)鍵字的具體實(shí)踐的文章就介紹到這了,更多相關(guān)C++11 上下文關(guān)鍵字內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • C語(yǔ)言函數(shù)調(diào)用底層實(shí)現(xiàn)原理分析

    C語(yǔ)言函數(shù)調(diào)用底層實(shí)現(xiàn)原理分析

    這篇文章主要介紹了C語(yǔ)言函數(shù)調(diào)用底層實(shí)現(xiàn)原理,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-02-02
  • C++11, 14, 17對(duì)tuple元素的訪問(wèn)詳情

    C++11, 14, 17對(duì)tuple元素的訪問(wèn)詳情

    這篇文章主要介紹了C++11, 14, 17對(duì)tuple元素的訪問(wèn)詳情,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-11-11
  • 基于C++實(shí)現(xiàn)一個(gè)簡(jiǎn)單的音樂(lè)系統(tǒng)

    基于C++實(shí)現(xiàn)一個(gè)簡(jiǎn)單的音樂(lè)系統(tǒng)

    C++中的Beep 函數(shù)是一個(gè)發(fā)出嗡鳴聲的函數(shù),本文將利用這個(gè)函數(shù)實(shí)現(xiàn)制作一個(gè)簡(jiǎn)單的聲音系統(tǒng)。文中的示例代碼講解詳細(xì),感興趣的小伙伴可以了解一下
    2022-12-12
  • C++多重繼承引發(fā)的重復(fù)調(diào)用問(wèn)題與解決方法

    C++多重繼承引發(fā)的重復(fù)調(diào)用問(wèn)題與解決方法

    這篇文章主要介紹了C++多重繼承引發(fā)的重復(fù)調(diào)用問(wèn)題與解決方法,結(jié)合具體實(shí)例形式分析了C++多重調(diào)用中的重復(fù)調(diào)用問(wèn)題及相應(yīng)的解決方法,需要的朋友可以參考下
    2018-05-05
  • c++虛函數(shù)與虛函數(shù)表原理

    c++虛函數(shù)與虛函數(shù)表原理

    這篇文章主要介紹了c++虛函數(shù)與虛函數(shù)表原理,用virtual?修飾的成員函數(shù)叫虛函數(shù),下面圍繞c++虛函數(shù)與虛函數(shù)得相關(guān)資料展開(kāi)內(nèi)容,需要的朋友可以參考一下
    2021-12-12
  • C++ 迭代器失效問(wèn)題解決

    C++ 迭代器失效問(wèn)題解決

    在C++中,當(dāng)一個(gè)vector進(jìn)行了插入或刪除操作時(shí),其迭代器可能會(huì)失效,本文就來(lái)介紹一下C++ 迭代器失效問(wèn)題解決,具有一定的參考價(jià)值,感興趣的可以了解一下
    2024-01-01
  • C++中事件機(jī)制的簡(jiǎn)潔實(shí)現(xiàn)及需要放棄的特性

    C++中事件機(jī)制的簡(jiǎn)潔實(shí)現(xiàn)及需要放棄的特性

    事件模型是被廣泛使用的好東西,但是C++標(biāo)準(zhǔn)庫(kù)里沒(méi)有現(xiàn)成的,現(xiàn)在VC11可以用在XP下了,那么就痛快的拿起C++11提供的先進(jìn)設(shè)施組合出一個(gè)輕便的實(shí)現(xiàn)吧感興趣的朋友可以了解下,或許對(duì)你有所幫助
    2013-02-02
  • C語(yǔ)言實(shí)現(xiàn)線性表的基本操作詳解

    C語(yǔ)言實(shí)現(xiàn)線性表的基本操作詳解

    線性表是最基本、最簡(jiǎn)單、也是最常用的一種數(shù)據(jù)結(jié)構(gòu)。一個(gè)線性表是n個(gè)具有相同特性的數(shù)據(jù)元素的有限序列,這篇文章帶你學(xué)習(xí)如何通過(guò)C語(yǔ)言實(shí)現(xiàn)線性表的順序存儲(chǔ)和鏈?zhǔn)酱鎯?chǔ)
    2021-11-11
  • C++ 靜態(tài)成員的類內(nèi)初始化詳解及實(shí)例代碼

    C++ 靜態(tài)成員的類內(nèi)初始化詳解及實(shí)例代碼

    這篇文章主要介紹了C++ 靜態(tài)成員的類內(nèi)初始化詳解及實(shí)例代碼的相關(guān)資料,需要的朋友可以參考下
    2017-02-02
  • C++11新特性之右值引用與完美轉(zhuǎn)發(fā)詳解

    C++11新特性之右值引用與完美轉(zhuǎn)發(fā)詳解

    C++11標(biāo)準(zhǔn)為C++引入右值引用語(yǔ)法的同時(shí),還解決了一個(gè)短板,即使用簡(jiǎn)單的方式即可在函數(shù)模板中實(shí)現(xiàn)參數(shù)的完美轉(zhuǎn)發(fā)。本文就來(lái)講講二者的應(yīng)用,需要的可以參考一下
    2022-09-09

最新評(píng)論

建德市| 新泰市| 松潘县| 武川县| 景德镇市| 邵阳县| 新营市| 孝感市| 广东省| 济宁市| 绍兴县| 宁陵县| 土默特右旗| 沈丘县| 卓资县| 特克斯县| 奇台县| 梓潼县| 大埔县| 紫阳县| 宣城市| 竹溪县| 健康| SHOW| 罗山县| 永定县| 东海县| 湖北省| 襄汾县| 昆明市| 汽车| 丰顺县| 潞西市| 保德县| 钦州市| 南康市| 日喀则市| 永寿县| 阿克陶县| 调兵山市| 清新县|