const string &shorterString (const string &s1, const string &s2)
{
return s1.size() < s2.size() ? s1 : s2;
}
爲這樣的小操作定義一個函數的好處是:
·閱讀和理解函數shorterString的調用,要比讀一條用等價的條件表達式取代函數調用表達式並理解它的含義要容易得多。
·如果需要做任何修改,修改函數要比找出來並修改每一處等價表達式容易得多。
·使用函數可以確保統一的行爲,每個測試都保證以相同的方式實現。
·函數可以重用,不必爲其他應用重寫代碼。
然而潛在的缺點是:調用函數比求解等價表達式要慢得多。
調用函數要做很多工作:調用前要先保存寄存器,並在返回時恢復;複製實參;程序還必須轉向一個新位置執行。
內聯函數避免調用時的開銷
inline const string &shorterString (const string &s1, const string &s2)
{
return s1.size() < s2.size() ? s1 : s2;
}
1、內聯函數應該放在頭文件中定義,這一點不同於其他函數。放在頭文件可以確保在調用函數時使用的定義是相同的,並且保證在調用點該函數的定義對編譯器可見。
2、在頭文件中加入或修改內聯函數時,使用了該頭文件的所有源文件都必須重新編譯。
3、內聯說明(inline specification)對於編譯器來說只是一個建議,編譯器可以選擇忽略這個建議。
4、在類內部定義的函數默認爲inline。