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

C++基礎(chǔ)入門教程(七):一些比較特別的基礎(chǔ)語(yǔ)法總結(jié)

 更新時(shí)間:2014年11月17日 10:07:37   投稿:junjie  
這篇文章主要介紹了C++基礎(chǔ)入門教程(七):一些比較特別的基礎(chǔ)語(yǔ)法總結(jié),本文總結(jié)的都是一些特殊的語(yǔ)法,需要的朋友可以參考下

這次又到了比較簡(jiǎn)單的內(nèi)容了,介紹了一些基本的循環(huán)控制、關(guān)系表達(dá)式、邏輯控制等。
這里就簡(jiǎn)單抽一些稍微比較特別的內(nèi)容來(lái)吹吹水,不,是來(lái)總結(jié)一下吧~

一、i++和++i

不,我不是來(lái)解釋i++和++i的區(qū)別的,只是書(shū)上提到一點(diǎn),在使用for循環(huán)的時(shí)候,倒底i++和++i有沒(méi)有區(qū)別呢?
答案是:幾乎沒(méi)有,隨便你用哪一個(gè)。
 
但是,要稍微注意一下兩種方式的內(nèi)部處理方式:

i++:先復(fù)制一個(gè)i的副本,然后將i加1,最后返回i的副本。
++i:將i加1,然后返回i。
 
這么一說(shuō),大家都知道誰(shuí)的效率更高,但對(duì)于現(xiàn)在的編譯器而言,是會(huì)自動(dòng)優(yōu)化的(但不知道是不是所有編譯器都這樣)。
然后,C++是允許自定義操作符的行為的,也就是說(shuō),我們可以為自己的類定義++操作,這時(shí)候,復(fù)制類的副本,消耗明顯就不能忽略不計(jì)了。

這個(gè),就不多說(shuō)了。

二、逗號(hào)運(yùn)算符

逗號(hào)運(yùn)算符可以將多條語(yǔ)句放到一起,如:

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

    for (int i = 2, j = 10 * i; i < 999; i++) {
        cout << j;
        break;
    }

int i = 2, j = 10 * i;就是逗號(hào)表達(dá)式了,那么,j的值是多少呢?沒(méi)錯(cuò),是20。
再來(lái), 這樣:
復(fù)制代碼 代碼如下:

int num = 0;
num = 10, 50;

注意,聲明變量賦值的時(shí)候是不能使用逗號(hào)表達(dá)式的,這個(gè)自己在編譯器編譯一下就知道了~規(guī)則這東西,沒(méi)必要死記~
這里的num值是多少呢?沒(méi)錯(cuò),是10,因?yàn)橘x值比逗號(hào)表達(dá)式優(yōu)先級(jí)要高,所以先把10賦值給num,后面的50被舍棄了。
那么,這樣呢:num = (10, 50);  結(jié)果是50,因?yàn)槔ㄌ?hào)的優(yōu)先級(jí)比賦值語(yǔ)句高,逗號(hào)表達(dá)式沾了光,所以最后是把50賦值給了num。
 
但是,如果有誰(shuí)非特殊情況下用這樣的賦值形式,那么,我保證不打死他。

三、類型別名(typedef)

這又是新手的一個(gè)痛點(diǎn),大部分初次接觸Cocos2d-x的朋友,一定被這兩條語(yǔ)句嚇?biāo)肋^(guò):

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

typedef void (Ref::*SEL_SCHEDULE)(float);
#define schedule_selector(_SELECTOR) static_cast<cocos2d::SEL_SCHEDULE>(&_SELECTOR)

這看似神復(fù)雜的東西,倒底是什么?這其實(shí)就是我們使用schedule定時(shí)器功能時(shí)要用到的。
這里先放著。
 
我們先來(lái)看看最簡(jiǎn)單的typedef用法:

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

typedef int IQ;
IQ mutouIQ = 250;
int normalIQ = 1;

所謂類型別名,就是給某個(gè)類型的名字取個(gè)外號(hào),比如我們把使用IQ代替int,如上代碼。
使用typedef int IQ,就代表把int取了個(gè)別名,叫做IQ,以后就可以用IQ來(lái)定義整數(shù)了。
粗俗地說(shuō),IQ就是int,int就是IQ,懂了吧~
 
再來(lái)看看這個(gè):typedef char* mpointer;
那么,我們以后就可以使用mpointer來(lái)定義char類型的指針。
 
大家有沒(méi)有發(fā)現(xiàn)什么?
如果把typedef去掉,就變成這樣:

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

int IQ;
char* mpointer;

沒(méi)錯(cuò),IQ和mpointer就像是一個(gè)變量名(在上面這段代碼里它們就是變量名)。
結(jié)果就是,在聲明變量之后,前面加上typedef,就然后這個(gè)變量成為了類型的別名。
很好理解吧?以后看到typedef很復(fù)雜的,就把typedef去掉,看看是聲明的什么變量,那這個(gè)別名就是代表這樣的變量了。
 
接下來(lái),再回到那神復(fù)雜的兩條語(yǔ)句:

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

typedef void (Ref::*SEL_SCHEDULE)(float);
#define schedule_selector(_SELECTOR) static_cast<cocos2d::SEL_SCHEDULE>(&_SELECTOR)

先看第一條,很復(fù)雜,我們把typedef去掉,變成:void (Ref::*SEL_SCHEDULE)(float);
這是什么,其實(shí)我也解釋不了,我C++很水的,但,這明顯就是一個(gè)“函數(shù)變量”(暫時(shí)這么稱呼它)。
一個(gè)返回值為void,參數(shù)為float的函數(shù),并且限定其類為Ref,怎么樣,很好理解吧。
 
把typedef放回去,這句代碼就是把SEL_SCHEDULE定義為上述所說(shuō)的那種函數(shù)。
接著看第二條代碼,這是一個(gè)宏:
1.schedule_selector是宏的名稱
2._SELECTOR是宏的參數(shù)
3.static_cast<cocos2d::SEL_SCHEDULE>(&_SELECTOR)簡(jiǎn)化為static_cast<SEL_SCHEDULE>(&_SELECTOR),這是強(qiáng)制類型轉(zhuǎn)換,將傳遞進(jìn)來(lái)的_SELECTOR轉(zhuǎn)換為某種類型
4.轉(zhuǎn)換為什么類型呢?沒(méi)錯(cuò),就是SEL_SCHEDULE類型,SEL_SCHEDULE是什么類型?剛剛已經(jīng)解釋過(guò)了,一個(gè)返回值為void,參數(shù)為float,其類為Ref的函數(shù)
 
最后,看看我們平時(shí)是怎么使用schedule_selector的:

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

this->schedule(schedule_selector(HelloWorld::update));

結(jié)果就是把我們的HelloWorld的update函數(shù)轉(zhuǎn)換成了SEL_SCHEDULE類型,然后傳遞給schedule函數(shù)。
 
呼,這回明白了吧,最后看看我們的update函數(shù)是如何定義的:void update(float dt);
返回值為void,參數(shù)為float,HelloWorld類繼承了Layer(最終也是繼承了Ref的)。
update函數(shù)的類型和SEL_SCHEDULE的基本上一樣,除了類的類型以外。
但因?yàn)長(zhǎng)ayer的最終基類是Ref,所以可以把update函數(shù)強(qiáng)制轉(zhuǎn)換為SEL_SCHEDULE類型。
 
好了,我再解釋下去的話,就越來(lái)越說(shuō)不通了,就到這里吧~

四、新的for循環(huán)(c++11)

C++11新增一種for循環(huán)語(yǔ)法,可以很方便地遍歷數(shù)組、vector以及array。
使用很簡(jiǎn)單,如下:

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

    int nums[3] = { 1, 2, 3 };
    for (int num : nums) {
    }

這樣就能把nums的值以此賦值給num,從而遍歷整個(gè)數(shù)組,不多說(shuō)喇~

五、cctype標(biāo)準(zhǔn)庫(kù)

我問(wèn)大家一個(gè)問(wèn)題,給你一個(gè)字母A,要判斷它是大寫還小寫,你怎么判斷?
(小若:你都說(shuō)了是字母A了,當(dāng)然是大寫的?。∫袛鄦??)
 
咳咳~!程序!我們是程序員,不能這么簡(jiǎn)單地去判斷~!這樣不嚴(yán)謹(jǐn)~!
我們應(yīng)該這樣:

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

char c = 'A';
if(c >= 'A' and c <= 'Z') {
    // 嗯,是大寫
}

一般人應(yīng)該都會(huì)這么想吧?(小若:不,一般人都知道A是大寫,不用判斷)

其實(shí)這樣不安全,萬(wàn)一字符編碼不是ASCII呢?有可能答案就不一樣了。
于是,我們應(yīng)該這樣寫:

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

    char c = 'A';
    if (isupper(c)) {
        // 嗯,是大寫
        cout << "yes";
    }

isupper是cctype庫(kù)的函數(shù),用來(lái)判斷字母是否是大寫。
這樣就更方便和通用了,
 
cctype庫(kù)在頭文件ctype.h里(或者cctype里),關(guān)于這個(gè)庫(kù)的更多函數(shù),百度一下,會(huì)有很多~

六、結(jié)束

好了,這次就到這里吧,C++果然不是我喜歡的東西,能吹水的地方比較少(都是比較嚴(yán)謹(jǐn)?shù)臇|西),我還能堅(jiān)持多久呢?~

相關(guān)文章

  • C語(yǔ)言入門篇--變量的左值和右值

    C語(yǔ)言入門篇--變量的左值和右值

    本篇文章是基礎(chǔ)篇,適合c語(yǔ)言剛?cè)腴T的朋友,本文對(duì)初識(shí)c語(yǔ)言的指針和指針變量做了簡(jiǎn)單的分析,幫助大家快速入門c語(yǔ)言的世界,更好的理解c語(yǔ)言
    2021-08-08
  • 漫談C++哈夫曼樹(shù)的原理及實(shí)現(xiàn)

    漫談C++哈夫曼樹(shù)的原理及實(shí)現(xiàn)

    給定N個(gè)權(quán)值作為N個(gè)葉子結(jié)點(diǎn),構(gòu)造一棵二叉樹(shù),若該樹(shù)的帶權(quán)路徑長(zhǎng)度達(dá)到最小,稱這樣的二叉樹(shù)為最優(yōu)二叉樹(shù),也稱為哈夫曼樹(shù)(Huffman?Tree)。本文將通過(guò)圖片為大家詳細(xì)講講C++哈夫曼樹(shù)的原理及實(shí)現(xiàn),需要的可以參考一下
    2022-08-08
  • c語(yǔ)言單詞本的新增、刪除、查詢按順序顯示功能

    c語(yǔ)言單詞本的新增、刪除、查詢按順序顯示功能

    這篇文章主要介紹了c語(yǔ)言單詞本的新增、刪除、查詢按順序顯示功能,本文通過(guò)示例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-12-12
  • Effective?C++?學(xué)習(xí)筆記

    Effective?C++?學(xué)習(xí)筆記

    這篇文章主要介紹了Effective?C++?學(xué)習(xí)筆記,想學(xué)習(xí)Effective?C++的朋友可以參考一下
    2023-08-08
  • C++?解決求兩個(gè)鏈表的第一個(gè)公共結(jié)點(diǎn)問(wèn)題

    C++?解決求兩個(gè)鏈表的第一個(gè)公共結(jié)點(diǎn)問(wèn)題

    本文主要介紹了利用C++實(shí)現(xiàn)輸入兩個(gè)無(wú)環(huán)的單向鏈表時(shí),找出它們的第一個(gè)公共結(jié)點(diǎn)的問(wèn)題。文章中的示例代碼簡(jiǎn)潔易懂,感興趣的同學(xué)可以和小編一起學(xué)習(xí)一下
    2021-12-12
  • C++中for循環(huán)與while循環(huán)的區(qū)別總結(jié)

    C++中for循環(huán)與while循環(huán)的區(qū)別總結(jié)

    這篇文章主要給大家介紹了關(guān)于C++中for循環(huán)與while循環(huán)的區(qū)別的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-10-10
  • c語(yǔ)言經(jīng)典習(xí)題之逆序字符串詳解

    c語(yǔ)言經(jīng)典習(xí)題之逆序字符串詳解

    這篇文章主要為大家介紹了c語(yǔ)言習(xí)題之逆序字符串,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來(lái)幫助
    2022-01-01
  • C++基于蔡基姆拉爾森計(jì)算公式實(shí)現(xiàn)由年月日確定周幾的方法示例

    C++基于蔡基姆拉爾森計(jì)算公式實(shí)現(xiàn)由年月日確定周幾的方法示例

    這篇文章主要介紹了C++基于蔡基姆拉爾森計(jì)算公式實(shí)現(xiàn)由年月日確定周幾的方法,涉及C++針對(duì)日期時(shí)間的數(shù)值運(yùn)算相關(guān)操作技巧,需要的朋友可以參考下
    2017-07-07
  • C++刪除鏈表中間節(jié)點(diǎn)的方法

    C++刪除鏈表中間節(jié)點(diǎn)的方法

    這篇文章主要介紹了C++刪除鏈表中間節(jié)點(diǎn)的方法,結(jié)合實(shí)例形式分析了鏈表刪除中間節(jié)點(diǎn)的具體思路與實(shí)現(xiàn)技巧,需要的朋友可以參考下
    2017-05-05
  • Qt拖放操作和打印操作的實(shí)現(xiàn)

    Qt拖放操作和打印操作的實(shí)現(xiàn)

    本文主要介紹了Qt拖放操作和打印操作的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-04-04

最新評(píng)論

宣威市| 石屏县| 孝昌县| 吴江市| 张家港市| 崇州市| 潮州市| 集安市| 瓮安县| 南川市| 松滋市| 深圳市| 杨浦区| 乌兰县| 浦北县| 天祝| 祁阳县| 天等县| 濉溪县| 崇信县| 蒙阴县| 卓资县| 措勤县| 崇义县| 潞西市| 闸北区| 义马市| 凌海市| 旬阳县| 大庆市| 济宁市| 紫金县| 呼和浩特市| 安陆市| 万盛区| 庄浪县| 班玛县| 南城县| 广汉市| 贺州市| 卫辉市|