亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > C++ > 正文

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

2020-01-26 15:11:20
字體:
來源:轉載
供稿:網友

這次又到了比較簡單的內容了,介紹了一些基本的循環控制、關系表達式、邏輯控制等。
這里就簡單抽一些稍微比較特別的內容來吹吹水,不,是來總結一下吧~

一、i++和++i

不,我不是來解釋i++和++i的區別的,只是書上提到一點,在使用for循環的時候,倒底i++和++i有沒有區別呢?
答案是:幾乎沒有,隨便你用哪一個。
 
但是,要稍微注意一下兩種方式的內部處理方式:

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

這個,就不多說了。

二、逗號運算符

逗號運算符可以將多條語句放到一起,如:

復制代碼 代碼如下:

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

int i = 2, j = 10 * i;就是逗號表達式了,那么,j的值是多少呢?沒錯,是20。
再來, 這樣:
復制代碼 代碼如下:

int num = 0;
num = 10, 50;

注意,聲明變量賦值的時候是不能使用逗號表達式的,這個自己在編譯器編譯一下就知道了~規則這東西,沒必要死記~
這里的num值是多少呢?沒錯,是10,因為賦值比逗號表達式優先級要高,所以先把10賦值給num,后面的50被舍棄了。
那么,這樣呢:num = (10, 50);  結果是50,因為括號的優先級比賦值語句高,逗號表達式沾了光,所以最后是把50賦值給了num。
 
但是,如果有誰非特殊情況下用這樣的賦值形式,那么,我保證不打死他。

三、類型別名(typedef)

這又是新手的一個痛點,大部分初次接觸Cocos2d-x的朋友,一定被這兩條語句嚇死過:

復制代碼 代碼如下:

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

這看似神復雜的東西,倒底是什么?這其實就是我們使用schedule定時器功能時要用到的。
這里先放著。
 
我們先來看看最簡單的typedef用法:

復制代碼 代碼如下:

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

所謂類型別名,就是給某個類型的名字取個外號,比如我們把使用IQ代替int,如上代碼。
使用typedef int IQ,就代表把int取了個別名,叫做IQ,以后就可以用IQ來定義整數了。
粗俗地說,IQ就是int,int就是IQ,懂了吧~
 
再來看看這個:typedef char* mpointer;
那么,我們以后就可以使用mpointer來定義char類型的指針。
 
大家有沒有發現什么?
如果把typedef去掉,就變成這樣:

復制代碼 代碼如下:

int IQ;
char* mpointer;

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

復制代碼 代碼如下:

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

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

復制代碼 代碼如下:

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

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

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

C++11新增一種for循環語法,可以很方便地遍歷數組、vector以及array。
使用很簡單,如下:

復制代碼 代碼如下:

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

這樣就能把nums的值以此賦值給num,從而遍歷整個數組,不多說喇~

五、cctype標準庫

我問大家一個問題,給你一個字母A,要判斷它是大寫還小寫,你怎么判斷?
(小若:你都說了是字母A了,當然是大寫的??!要判斷嗎?)
 
咳咳~!程序!我們是程序員,不能這么簡單地去判斷~!這樣不嚴謹~!
我們應該這樣:

復制代碼 代碼如下:

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

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

其實這樣不安全,萬一字符編碼不是ASCII呢?有可能答案就不一樣了。
于是,我們應該這樣寫:

復制代碼 代碼如下:

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

isupper是cctype庫的函數,用來判斷字母是否是大寫。
這樣就更方便和通用了,
 
cctype庫在頭文件ctype.h里(或者cctype里),關于這個庫的更多函數,百度一下,會有很多~

六、結束

好了,這次就到這里吧,C++果然不是我喜歡的東西,能吹水的地方比較少(都是比較嚴謹的東西),我還能堅持多久呢?~

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
亚洲视频在线观看| 国产精品极品尤物在线观看| 国产免费一区二区三区在线观看| 成人信息集中地欧美| 九九久久国产精品| 日韩最新中文字幕电影免费看| 久久国产精品电影| 亚洲视频一区二区| 欧美黄色性视频| 欧美日韩爱爱视频| 久久全国免费视频| 日本精品免费观看| 久久精品国产久精国产思思| 国产一区二区激情| 色无极影院亚洲| 亚洲第一视频在线观看| 日韩美女中文字幕| 98午夜经典影视| 国产精品久久久久久久一区探花| 91九色国产在线| 26uuu另类亚洲欧美日本老年| 国产精品第三页| 精品女同一区二区三区在线播放| 亚洲成人精品视频在线观看| 97香蕉超级碰碰久久免费软件| 91精品久久久久久久久| 丝袜情趣国产精品| 久久精品成人欧美大片| 精品视频中文字幕| 亚洲在线免费观看| 亚洲午夜精品久久久久久性色| 欧美亚洲另类视频| 97超碰蝌蚪网人人做人人爽| 日韩av网址在线观看| 久久久人成影片一区二区三区观看| 日韩中文字幕av| 国模精品视频一区二区三区| 91高清在线免费观看| 日韩av一区在线观看| 国产精品美女免费看| 久久精视频免费在线久久完整在线看| 久久99久久99精品中文字幕| 亚洲老司机av| 欧美理论电影网| 亚洲第一精品久久忘忧草社区| 91久久国产精品91久久性色| 欧美一级片免费在线| 久久久久国产精品一区| 国产精品视频久久久久| 欧美极品欧美精品欧美视频| 欧美性jizz18性欧美| 精品久久久av| 午夜精品福利电影| 欧美成人剧情片在线观看| 色综合久久精品亚洲国产| 日韩在线观看免费| 欧美高清视频在线| 日韩**中文字幕毛片| 国产精品第10页| 国产黑人绿帽在线第一区| 青草青草久热精品视频在线网站| 久久久久久久久久久国产| 亚洲国产成人91精品| 国产激情久久久久| 国产精品视频在线播放| 亚洲最大av网| 亚洲午夜激情免费视频| 欧美在线免费看| 97国产一区二区精品久久呦| 久久视频在线视频| 91丝袜美腿美女视频网站| 国产伦精品一区二区三区精品视频| 亚洲成色www8888| 欧美日韩另类视频| 成人免费网站在线观看| 日韩在线观看免费高清完整版| 成人黄色短视频在线观看| 亚洲热线99精品视频| 亚洲字幕一区二区| 亚洲国产美女精品久久久久∴| 国产欧美日韩免费看aⅴ视频| 久久亚洲精品网站| 热久久免费视频精品| 欧美国产第二页| 色在人av网站天堂精品| 国产精品欧美亚洲777777| 国产成人91久久精品| 亚洲人成在线观看网站高清| 国产亚洲精品一区二区| 92版电视剧仙鹤神针在线观看| 欧美日韩性视频在线| 国产一区在线播放| 国产精品高精视频免费| 欧美成人精品不卡视频在线观看| 伊人av综合网| 日本中文字幕久久看| 日本伊人精品一区二区三区介绍| 国产精品久久久久久久久久新婚| 日韩亚洲欧美中文高清在线| 青青青国产精品一区二区| 日韩中文字幕欧美| 国产一区二区在线播放| 欧美激情第一页xxx| 亚洲第一天堂无码专区| xxx成人少妇69| 久久久久久久色| 久久91亚洲精品中文字幕| 日韩h在线观看| 国产日韩精品在线观看| 成人在线国产精品| 成人夜晚看av| 国产精品视频一| 一区二区三区四区在线观看视频| 欧美激情一区二区三区在线视频观看| 91久久精品久久国产性色也91| 日韩欧美精品免费在线| 色先锋资源久久综合5566| 亚洲欧美日韩直播| 在线精品播放av| 亚洲自拍偷拍区| 欧美性一区二区三区| 中文字幕精品在线视频| 久久久久久久成人| 久久久国产精品亚洲一区| 精品久久久久久国产| 国产亚洲精品美女| 精品国产欧美成人夜夜嗨| 色综合老司机第九色激情| 国产一区二区三区四区福利| 国产精品美女久久久久av超清| 亚洲精品成人久久| 国产一区二区三区视频免费| 91精品视频大全| 夜夜躁日日躁狠狠久久88av| 国产噜噜噜噜久久久久久久久| 国产精品久久久久久久久粉嫩av| 色综合天天综合网国产成人网| 国产精品第一视频| 日韩麻豆第一页| 日韩中文有码在线视频| 2025国产精品视频| 亚洲电影免费观看高清完整版在线观看| 国产成人在线视频| 国产精品欧美风情| 亚洲人成在线免费观看| 国产精品久久久久免费a∨大胸| 久久精品视频va| 日韩小视频在线观看| 欧美黑人性猛交| 精品视频久久久久久| 亚洲国产另类久久精品| 91精品国产91久久久久久最新| 亚洲xxxxx性| 亚洲欧美精品在线| 精品美女国产在线| 久久国产精品99国产精| 亚洲性夜色噜噜噜7777| 日韩激情片免费| 国产精品视频网| 91精品久久久久久久久久久久久| 国产精品都在这里| 亚洲一区二区三区在线视频| 亚洲白拍色综合图区| 国产视频精品久久久|