C++關(guān)鍵字筆記

const:

所修飾的對象或變量不能改變布持,修飾函數(shù)時筐眷,該函數(shù)不能修改在函數(shù)外面聲明的變量肿孵,也不能調(diào)用任何非const函數(shù)。在函數(shù)聲明和定義時都要加上const磷仰,放在函數(shù)參數(shù)列表的最后一個括號后袍嬉。


const_cast:

去除變量或?qū)ο蟮腸onst限定,格式為const_cast<int *>(const_p)


dynamic_cast:

dynamic_cast用于類繼承層次間的指針或引用轉(zhuǎn)換灶平。主要還是用于執(zhí)行“安全的向下轉(zhuǎn)型“伺通。向上轉(zhuǎn)型本身就是安全的。


enum:

enum(枚舉)類型逢享,給出一系列固定的值罐监,只能在這里面進行選擇一個。


explicit:

explicit關(guān)鍵字只能用于修飾只有一個參數(shù)的類構(gòu)造函數(shù), 它的作用是表明該構(gòu)造函數(shù)是顯示的, 而非隱式的瞒爬。e.g., CxString(int size){size_ = size}允許CxString tmp = 10;這樣子的構(gòu)造等同于CxString tmp(10), 與CxString tmp = ”cc“;混淆弓柱。


export:

為了訪問其他編譯單元(如另一代碼文件)中的變量或?qū)ο螅瑢ζ胀愋停òɑ緮?shù)據(jù)類侧但、結(jié)構(gòu)和類)矢空,可以利用關(guān)鍵字 extern,來使用這些變量或?qū)ο髸r禀横;但是對模板類型屁药,則必須在定義這些模板類對象和模板函數(shù)時,使用標準 C++ 新增加的關(guān)鍵字 export(導(dǎo)出)柏锄。

e.g.

// out.h:(聲明頭文件——只包含out函數(shù)的聲明信息)

template<class T> void out (const T& t);

// out.cpp:(定義代碼文件——包含out函數(shù)的聲明[通過include]和定義等全部信息)

#include <iostream>

#include “out.h”

export template<class T> void out (const T& t) {std::cerr << t;}

//user.cpp:(用戶代碼文件——包含函數(shù)的聲明頭文件后就可以使用該函數(shù))

#include “out.h”

// 使用out()


extern: extern(外部的)聲明變量或函數(shù)為外部鏈接酿箭,即該變量或函數(shù)名在其它文件中可見复亏。被其修飾的變量(外部變量)是靜態(tài)分配空間的,即程序開始時分配缭嫡,結(jié)束時釋放缔御。

//在test1.h中有下列聲明:

#ifndef TEST1H //防止頭文件的重復(fù)引用

#define TEST1H

extern char g_str[]; // 聲明全局變量g_str

#endif

// 在test1.cpp中

#include "test1.h"

char g_str[] = "123456"; // 定義全局變量g_str

//以上是test1模塊, 它的編譯和連接都可以通過,如果我們還有test2模塊也想使用g_str,只需要在原文件中引用就可以了

#include "test1.h"

void fun2()? ? { cout << g_str << endl;? ? }


friend: 友元可以訪問與其有 friend 關(guān)系的類中的 private/protected 成員妇蛀,通過友元直接訪問類中的 private/protected 成員的主要目的是提高效率耕突。

https://www.cnblogs.com/honeybusybee/p/5259265.html


inline: 在c/c++中,為了解決一些頻繁調(diào)用的小函數(shù)大量消耗椘兰埽空間(棧內(nèi)存)的問題有勾,特別的引入了inline修飾符,表示為內(nèi)聯(lián)函數(shù)古程。

e.g.

#include <stdio.h>

//函數(shù)定義為inline即:內(nèi)聯(lián)函數(shù)

inline char* dbtest(int a) {

? ? return (i % 2 > 0) ? "奇" : "偶";

}

int main(){

? for (i=1; i < 100; i++) {

? ? ? printf("i:%d? ? 奇偶性:%s /n", i, dbtest(i));? ?

? }

}

在內(nèi)部的工作就是在每個for循環(huán)的內(nèi)部任何調(diào)用dbtest(i)的地方都換成了(i%2>0)?”奇”:”偶”,這樣就避免了頻繁調(diào)用函數(shù)對棧內(nèi)存重復(fù)開辟所帶來的消耗喊崖。

注意:? 1. inline 是一種“用于實現(xiàn)的關(guān)鍵字”挣磨,而不是一種“用于聲明的關(guān)鍵字”。

2. 內(nèi)聯(lián)是以代碼膨脹(復(fù)制)為代價荤懂,僅僅省去了函數(shù)調(diào)用的開銷茁裙,從而提高函數(shù)的執(zhí)行效率。


mutable: 當類或者結(jié)構(gòu)體中的某個變量被mutable關(guān)鍵字修飾時节仿,即便這個結(jié)構(gòu)體或者類被實例化為const類型晤锥,其中被mutable修飾的變量仍可以被修改。

e.g.,

typedef struct test {

????mutable int iVal = 0;

}Test;

int main() {

????const Test t;

????t.iVal = 2;

}


register:?當對一個變量頻繁被讀寫時廊宪,需要反復(fù)訪問內(nèi)存矾瘾,從而花費大量的存取時間。為此箭启,C語言提供了一種變量壕翩,即寄存器變量。這種變量存放在CPU的寄存器中傅寡,使用時放妈,不需要訪問內(nèi)存,而直接從寄存器中讀寫荐操,從而提高效率芜抒。

注意: 1. 只有局部變量才可以定義為寄存器變量

? ? ? ? ? ? 2. 建議型關(guān)鍵字,同inline托启,實際編譯的時候可以并未成為寄存器變量宅倒。


reinterpret_cast:?


static:?

運行一個完整的程序。我們可將整個存儲區(qū)分為四塊:

(1)棧區(qū):就比如局部變量驾中,對應(yīng)的函數(shù)參數(shù)等這些唉堪,調(diào)用完之后相應(yīng)的內(nèi)存會自己釋放掉模聋,很讓人省心。

(2)堆區(qū):堆來堆去的唠亚。得要人動手链方。所以得我們自己手動去分配和釋放。像malloc(c),new(c++) 灶搜,delete 一下等等祟蚀。

(3)全局數(shù)據(jù)(靜態(tài)區(qū)):全局變量和靜態(tài)變量是放在一個窩里面的。靜態(tài)變量如果沒有初始化割卖,系統(tǒng)會自動初始化的前酿。雖然系統(tǒng)會自動初始化,但是分房間的時候還是得分清楚的鹏溯。所以最終是初始化的全局變量和初始化的靜態(tài)變量分在一塊區(qū)域罢维,即同一個房間。未初始化的全局變量和未初始化的靜態(tài)變量分在一塊丙挽。程序結(jié)束時釋放肺孵。

(4)最后就是代碼區(qū)了

static的用法:

(a)如果用static修飾局部函數(shù)的變量。那么這個變量就是靜態(tài)變量了颜阐。在主函數(shù)中平窘,如果重復(fù)調(diào)用這個函數(shù),那么里面的這個靜態(tài)變量只會初始化一次凳怨。如果沒有用static修飾瑰艘,那么每次調(diào)用的時候都會對這個變量進行初始化。

(b)如果用static修飾全局的變量肤舞。那么在這個文件中所有的函數(shù)都可以使用這個變量紫新。如果一個工程里面有a.c和b.c文件,static在a.c中定義的萨赁。那么b.c就用不了這個static修飾的變量弊琴。如果沒有static修飾,只要加一個extern外部調(diào)用聲明杖爽,就可以了敲董。

(c)如果用static修飾全局函數(shù),同上(b)慰安。

(d)static修飾類中的變量腋寨。用static修飾之后,那么這個變量的內(nèi)存就分配在了全局數(shù)據(jù)區(qū)了化焕,并不和該類在同一片區(qū)域萄窜。所以static只會被初始化一次。

(e)static修飾類中的函數(shù)。那么該函數(shù)就變成了靜態(tài)函數(shù)查刻。靜態(tài)函數(shù)不能訪問非靜態(tài)函數(shù)键兜,非靜態(tài)函數(shù)可以訪問靜態(tài)函數(shù)。訪問靜態(tài)函數(shù)可以用(.->)穗泵,指針或者類名::三種方式訪問普气。


static_cast:?

static_cast < type-id > ( expression )

該運算符把 expression 轉(zhuǎn)換為 type-id 類型,但沒有運行時類型檢查來保證轉(zhuǎn)換的安全性佃延。它主要有如下幾種用法:

① 用于類層次結(jié)構(gòu)中基類和子類之間指針或引用的轉(zhuǎn)換现诀。進行上行轉(zhuǎn)換(把子類的指針或引用轉(zhuǎn)換成基類表示)是安全的;進行下行轉(zhuǎn)換(把基類指針或引用轉(zhuǎn)換成子類表示)時履肃,由于沒有動態(tài)類型檢查仔沿,所以是不安全的。

② 用于基本數(shù)據(jù)類型之間的轉(zhuǎn)換尺棋,如把 int 轉(zhuǎn)換成 char封锉,把 int 轉(zhuǎn)換成 enum。這種轉(zhuǎn)換的安全性也要開發(fā)人員來保證膘螟。

③ 把空指針轉(zhuǎn)換成目標類型的空指針烘浦。

④ 把任何類型的表達式轉(zhuǎn)換成void類。


union:?不同的是 enum 實質(zhì)上是 int 類型的萍鲸,而 union 可以用于所有類型。


virtual:?基類的函數(shù)調(diào)用如果有virtual則根據(jù)多態(tài)性調(diào)用派生類的擦俐,如果沒有virtual則是正常的靜態(tài)函數(shù)調(diào)用脊阴,還是調(diào)用基類的。

純虛函數(shù):?virtual ostream& print( ostream&=cout ) const = 0;

包含一個或多個純虛擬函數(shù)的類被編譯器識別為抽象基類蚯瞧。抽象基類不能被實例化嘿期,一般用于繼承。抽象基類只能作為子對象出現(xiàn)在后續(xù)的派生類中


volatile:?用volatile聲明的變量表示該變量隨時可能發(fā)生變化埋合,與該變量有關(guān)的運算备徐,不要進行編譯優(yōu)化,以免出錯

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末甚颂,一起剝皮案震驚了整個濱河市蜜猾,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌振诬,老刑警劉巖蹭睡,帶你破解...
    沈念sama閱讀 212,884評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異赶么,居然都是意外死亡肩豁,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,755評論 3 385
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來清钥,“玉大人琼锋,你說我怎么就攤上這事∷钫眩” “怎么了缕坎?”我有些...
    開封第一講書人閱讀 158,369評論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長从橘。 經(jīng)常有香客問我念赶,道長,這世上最難降的妖魔是什么恰力? 我笑而不...
    開封第一講書人閱讀 56,799評論 1 285
  • 正文 為了忘掉前任叉谜,我火速辦了婚禮,結(jié)果婚禮上踩萎,老公的妹妹穿的比我還像新娘停局。我一直安慰自己,他們只是感情好香府,可當我...
    茶點故事閱讀 65,910評論 6 386
  • 文/花漫 我一把揭開白布董栽。 她就那樣靜靜地躺著,像睡著了一般企孩。 火紅的嫁衣襯著肌膚如雪锭碳。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 50,096評論 1 291
  • 那天勿璃,我揣著相機與錄音擒抛,去河邊找鬼。 笑死补疑,一個胖子當著我的面吹牛歧沪,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播莲组,決...
    沈念sama閱讀 39,159評論 3 411
  • 文/蒼蘭香墨 我猛地睜開眼诊胞,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了锹杈?” 一聲冷哼從身側(cè)響起撵孤,我...
    開封第一講書人閱讀 37,917評論 0 268
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎竭望,沒想到半個月后早直,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,360評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡市框,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,673評論 2 327
  • 正文 我和宋清朗相戀三年霞扬,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,814評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡喻圃,死狀恐怖萤彩,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情斧拍,我是刑警寧澤雀扶,帶...
    沈念sama閱讀 34,509評論 4 334
  • 正文 年R本政府宣布,位于F島的核電站肆汹,受9級特大地震影響愚墓,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜昂勉,卻給世界環(huán)境...
    茶點故事閱讀 40,156評論 3 317
  • 文/蒙蒙 一浪册、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧岗照,春花似錦村象、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,882評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至迫吐,卻和暖如春库菲,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背志膀。 一陣腳步聲響...
    開封第一講書人閱讀 32,123評論 1 267
  • 我被黑心中介騙來泰國打工蝙昙, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人梧却。 一個月前我還...
    沈念sama閱讀 46,641評論 2 362
  • 正文 我出身青樓,卻偏偏與公主長得像败去,于是被迫代替她去往敵國和親放航。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 43,728評論 2 351