Ref
cppreference - inline
cppreference - classes
類
類包含數(shù)據(jù)(變量)成員和函數(shù)成員霹琼,數(shù)據(jù)成員又分為靜態(tài)數(shù)據(jù)、動(dòng)態(tài)數(shù)據(jù)倔矾;函數(shù)成員分為靜態(tài)函數(shù)非靜態(tài)函數(shù)驼抹。
類實(shí)例
類實(shí)例可以叫做對(duì)象,類是抽象的描述描述一類事物的特征竟坛,實(shí)例是具體存在的某個(gè)類實(shí)體闽巩,如例:Dog是一個(gè)類钧舌,a是這個(gè)類的一個(gè)實(shí)例。
class Dog{
public:
Dog(int t,string n,string c):tail(t),name(n),color(c){}
int tail;
string name;
string color;
};
Dog a(18,"da huang","yellow");
數(shù)據(jù)
靜態(tài)數(shù)據(jù)
被 static
修飾的數(shù)據(jù)成員是靜態(tài)數(shù)據(jù)成員涎跨,屬于類的屬性洼冻,既可以通過(guò)類名訪問(wèn)如 A::st_var
,也可以通過(guò)類實(shí)例訪問(wèn)如 a.st_var
隅很。存儲(chǔ)在數(shù)據(jù)段撞牢,只有一份,可以看作全局變量外构。
非靜態(tài)數(shù)據(jù)
非靜態(tài)數(shù)據(jù)屬于對(duì)象屬性普泡,只能通過(guò)對(duì)象來(lái)進(jìn)行訪問(wèn)。與對(duì)象同在审编,是對(duì)象的一部分撼班。
函數(shù)(方法)
靜態(tài)函數(shù)成員
被 static
修飾的函數(shù)成員,是類的函數(shù)垒酬,通過(guò)類或者類實(shí)例都可以訪問(wèn)砰嘁。存儲(chǔ)在代碼段。
非靜態(tài)函數(shù)成員
只能通過(guò)對(duì)象來(lái)進(jìn)行調(diào)用勘究,存儲(chǔ)在代碼段矮湘。
默認(rèn)函數(shù)
class Foo{
public:
int a;
int b;
}
類一般都要具有以下6個(gè)函數(shù),如上例
- 構(gòu)造函數(shù)
default_constructor
- 析構(gòu)函數(shù)
destructor
- 拷貝構(gòu)造函數(shù)
copy_constructor
- 拷貝賦值函數(shù)
copy_assignment
- 移動(dòng)構(gòu)造函數(shù) C++11新
move_constructor
- 移動(dòng)賦值函數(shù) C++11新
move_assignment
調(diào)用時(shí)機(jī)
- 構(gòu)造函數(shù):顯式定義類對(duì)象口糕。
- 析構(gòu)函數(shù):生存期結(jié)束缅阳。
-
拷貝構(gòu)造函數(shù):使用類對(duì)象來(lái)構(gòu)造/初始化對(duì)象;類對(duì)象參數(shù)傳遞景描;函數(shù)返回值為類對(duì)象時(shí)十办。如
A a(b); A a=b;
。 -
拷貝賦值函數(shù):使用類對(duì)象賦值給對(duì)象超棺。如
a=b;//a,b都已經(jīng)存在
向族。 -
移動(dòng)構(gòu)造函數(shù):使用右值引用構(gòu)造/初始化對(duì)象。
A a(std::move(b));
-
移動(dòng)賦值函數(shù):使用右值引用賦值給對(duì)象棠绘。
a=std::move(b);
內(nèi)聯(lián)函數(shù)
inline
關(guān)鍵字修飾的函數(shù)件相。
inline
關(guān)鍵詞的本意是作為給優(yōu)化器的指示器,以指示優(yōu)先采用函數(shù)的內(nèi)聯(lián)替換而非進(jìn)行函數(shù)調(diào)用氧苍,即并不執(zhí)行將控制轉(zhuǎn)移到函數(shù)體內(nèi)的函數(shù)調(diào)用 CPU 指令夜矗,而是代之以執(zhí)行函數(shù)體的一份副本而無(wú)需生成調(diào)用。這會(huì)避免函數(shù)調(diào)用的開(kāi)銷(傳遞實(shí)參及返回結(jié)果)让虐,但它可能導(dǎo)致更大的可執(zhí)行文件紊撕,因?yàn)楹瘮?shù)體必須被復(fù)制多次。因?yàn)殛P(guān)鍵詞 inline 的含義是非強(qiáng)制的澄干,編譯器擁有對(duì)任何未標(biāo)記為 inline 的函數(shù)使用內(nèi)聯(lián)替換的自由逛揩,和對(duì)任何標(biāo)記為 inline 的函數(shù)生成函數(shù)調(diào)用的自由。這些優(yōu)化選擇不改變上述關(guān)于多個(gè)定義和共享靜態(tài)變量的規(guī)則麸俘。