原文鏈接:https://blog.csdn.net/qq_38646470/article/details/79795538
專欄鏈接:https://blog.csdn.net/column/details/20026.html
[TOC]
#1.const成員函數
const修飾成員函數
在成員函數後面加const,const修飾this指針所指向的對象,也就是保證調用這個const成員函數的對象在函數內不會被改變。
class Date
{
public :
void Display ()
{
cout<<"year:" <<_year<< endl;
cout<<"month:" <<_month<< endl;
cout<<"day:" <<_day<< endl<<endl ;
}
void Display () const
{
cout<<"year:" <<_year<< endl;
cout<<"month:" <<_month<< endl;
cout<<"day:" <<_day<< endl<<endl;
}
private :
int _year ; // 年
int _month ; // 月
int _day ; // 日
};
void Test ()
{
Date d1 ;
d1.Display ();
const Date d2;
d2.Display ();
}
☛ const對象不可以調用非const成員函數可以調用const成員函數
☛ 非const對象可以調用非const成員函數和const成員函數
☛ const成員函數內可以調用其它的const成員函數不可以調用非const成員函數
☛非const成員函數內可以調用其它的const成員函數非const成員函數
#2.內聯函數
以inline修飾的函數叫做內聯函數,編譯時C++編譯器會調用內聯函數的地方展開,沒有函數壓棧的開銷,內聯函數提升程序運行的效率。
☛. inline是一種以空間換時間的做法,省去調用函數額開銷。所以代碼很長或者有循環/遞歸的的函數不適宜使用內聯。
☛. inline對於編譯器而言只是一個建議,編譯器會自動優化,如果定義爲inline的函數體內有循環遞歸等等,編譯器優化時會忽略掉內聯。
☛. inline必須函數定義放在一起,才能成爲內聯函數,僅將inline放在聲明前是不起不作用的。
☛. 定義在類內的成員函數默認定義爲內聯函數。
但是在一般的編譯器下看不出內聯函數的效果,因爲編譯器會自動優化。接下來給大家在linux下查看。
#3.友元
友元函數:
在C++中友元函數允許在類外訪問該類中的任何成員,就象成員函數一樣,友元函數用關鍵字friend說明。
☛. 友元函數不是類的成員函數。
☛. 友元函數可以通過對象訪問所有成員,私有和保護成員也一樣。
友元函數:
友元類:
#4.static成員
#5.N中構造拷貝構造的優化
看一段代碼:
class AA
{};
AA f (AA a)
{
return a ;
}
void Test1 ()
{
AA a1 ;
a1 = f(a1);
}
void Test2 ()
{
AA a1 ;
AA a2 = f(a1);
}
void Test3 ()
{
AA a1 ;
AA a2 = f(f(a1));
}
回答下面的問題:
Test1中調用了次AA的拷貝構造函數。
Test2中調用了次AA的拷貝構造函數。
Test3中調用了___次AA的拷貝構造函數。