溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

C++ 容易犯的錯(cuò)誤和容易忘記的知識(shí)點(diǎn)(一)

發(fā)布時(shí)間:2020-07-30 18:40:28 來(lái)源:網(wǎng)絡(luò) 閱讀:153 作者:sonissa 欄目:編程語(yǔ)言
  1. 在使用printf輸出時(shí),關(guān)于字符串輸出格式
    對(duì)于 %-a.bs:
    • 表示左對(duì)齊
      a 表示輸出占的寬度,如果這個(gè)寬度不夠,則自動(dòng)擴(kuò)展到足夠?qū)挾?br/>b 表示輸出字符串中多少個(gè)字符,如果原字符串長(zhǎng)于這個(gè)寬度,則截?cái)啵嘤嗟牟惠敵?/li>

2.關(guān)于指針數(shù)組和數(shù)組指針,比方說(shuō):
<1> int p1[10]; 和 <2> int (p2)[10];
分清楚的關(guān)鍵是依靠運(yùn)算符優(yōu)先級(jí),[ ]優(yōu)先級(jí)大于,所以p是一個(gè)數(shù)組,int 修飾的是數(shù)組的元素,所以<1>是在一個(gè)指針數(shù)組,每一個(gè)元素是一個(gè)指針
同理<2>是一個(gè)數(shù)組指針,是一個(gè)指向一個(gè)有十個(gè)元素的數(shù)組的指針。

3.關(guān)于內(nèi)聯(lián)函數(shù)
<1>內(nèi)聯(lián)函數(shù)中的代碼應(yīng)該只是很簡(jiǎn)單、執(zhí)行很快的幾條語(yǔ)句。如果一個(gè)函數(shù)較為復(fù)雜,它執(zhí)行的時(shí)間可能上萬(wàn)倍于函數(shù)調(diào)用的額外開(kāi)銷(xiāo),那么將其作為內(nèi)聯(lián)函數(shù)處理的結(jié)果是付出讓代碼體積增加不少的代價(jià),卻只使速度提高了萬(wàn)分之一,這顯然是不劃算的。

<2>有時(shí)函數(shù)看上去很簡(jiǎn)單,例如只有一個(gè)包含一兩條語(yǔ)句的循環(huán),但該循環(huán)的執(zhí)行次數(shù)可能很多,要消耗大量時(shí)間,那么這種情況也不適合將其實(shí)現(xiàn)為內(nèi)聯(lián)函數(shù)。

<3>需要注意的是,調(diào)用內(nèi)聯(lián)函數(shù)的語(yǔ)句前必須已經(jīng)出現(xiàn)內(nèi)聯(lián)函數(shù)的定義(即整個(gè)函數(shù)體),而不能只出現(xiàn)內(nèi)聯(lián)函數(shù)的聲明。

4.關(guān)于靜態(tài)成員變量
<1> 靜態(tài)成員為所有類(lèi)對(duì)象所共享,不屬于某個(gè)具體的實(shí)例
<2>靜態(tài)成員變量必須在類(lèi)外定義,定義時(shí)不添加static關(guān)鍵字
<3>類(lèi)靜態(tài)成員即可用類(lèi)名::靜態(tài)成員或者對(duì)象.靜態(tài)成員來(lái)訪問(wèn)
<4>靜態(tài)成員函數(shù)沒(méi)有隱藏的this指針,不能訪問(wèn)任何非靜態(tài)成員
<5>靜態(tài)成員和類(lèi)的普通成員一樣,也有public、protected、private3種訪問(wèn)級(jí)別,也可以具有返回值
<6>子類(lèi)可以訪問(wèn)父類(lèi)的靜態(tài)成員
<7>靜態(tài)成員無(wú)多態(tài)特性

5.關(guān)于函數(shù)聲明
函數(shù)聲明中,參數(shù)名稱可以忽略不寫(xiě)
eg:int Find( int , char );

6.C風(fēng)格字符串相關(guān)
eg:、
char a="abcde";
char
b="abcde";
//此時(shí)a和b地址是相同的,都指向字符常量區(qū)的abcde
char c[]="abcde";
//此時(shí)c地址和a,b不同,因?yàn)閏是一個(gè)數(shù)組,數(shù)組數(shù)據(jù)是存在棧區(qū)
char d[]={‘a(chǎn)’,'b','c','d','e'};
//d和c雖然定義時(shí)看起來(lái)內(nèi)容一樣,但是大小不同,使用“ ”初始化的數(shù)組會(huì)多出一個(gè)‘\0’元素

7.關(guān)于結(jié)構(gòu)體大小的計(jì)算
普通計(jì)算:
由于內(nèi)存對(duì)齊的問(wèn)題,各個(gè)數(shù)據(jù)類(lèi)型放的位置不同就會(huì)導(dǎo)致結(jié)構(gòu)體的大小不一樣。

偏移量:結(jié)構(gòu)體中的偏移量就是結(jié)構(gòu)體成員和結(jié)構(gòu)體變量的地址之差,比如說(shuō)第一個(gè)結(jié)構(gòu)體成員的偏移量就是0,第二個(gè)結(jié)構(gòu)成員的偏移量就是第一個(gè)結(jié)構(gòu)體成員的大小,假如第一個(gè)成員的是int b;那么第二個(gè)結(jié)構(gòu)體成員變量的偏移量就是4。

計(jì)算結(jié)構(gòu)體大小的規(guī)則:

  1. 每一個(gè)成員的偏移量都必須是該成員的倍數(shù)。
  2. 結(jié)構(gòu)體的大小必須是該結(jié)構(gòu)體字節(jié)數(shù)最大成員的倍數(shù)。

有位段計(jì)算:
在32位cpu上選擇缺省對(duì)齊的情況下,每行支持4個(gè)字節(jié)即32bit
最后結(jié)構(gòu)體大小為 (行數(shù)*32)/8 字節(jié)

8.純虛函數(shù)
使用場(chǎng)景:
什么情況下使用純虛函數(shù)(pure vitrual function)?
1.當(dāng)想在基類(lèi)中抽象出一個(gè)方法,且該基類(lèi)只做能被繼承,而不能被實(shí)例化;
2.這個(gè)方法必須在派生類(lèi)(derived class)中被實(shí)現(xiàn);

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI