1.默認實參
默認實參放在后面,需要傳入的參數(shù)放在前面。
傳入的參數(shù)會從前到后,找到第一個可以傳入的參數(shù)傳入结缚。
int func(int a, int b = 10, int c = 15) {
// 需要輸入的參數(shù)放在前面
return a * 3 + b * 2 + c;
}
int main() {
int d = 5;
cout << func(d);
}
2.內(nèi)聯(lián)函數(shù)——inline
內(nèi)聯(lián)函數(shù)就是在調(diào)用點上“內(nèi)聯(lián)地展開”。
note : 內(nèi)聯(lián)說明只是向編譯器發(fā)出的一個請求软棺,編譯器可以選擇忽略這個請求红竭。
3.constexpr函數(shù)
函數(shù)體內(nèi)必須有且只有一條return語句。
constexpr int new_sz() { return 42; }
constexpr int foo = new_sz(); // 正確,foo是一個常量表達式
為了能在編譯過程中隨時展開茵宪,constexpr函數(shù)被隱式地指定為內(nèi)聯(lián)函數(shù)最冰。
4.調(diào)試幫助
assert預處理宏
assert宏定義在cassert頭文件中。預處理名字由預處理器而非編譯器管理稀火,因此我們可以直接使用預處理名字而無須提供using聲明暖哨。我們應該使用assert而不是std::assert,也不需要為assert提供using聲明凰狞。
assert()包含一個合理的條件篇裁,如果條件不成立則中止編譯。
int shortL = 5, longL = 10;
assert(shortL < longL);
NDEBUG預處理變量
__func__ // 存放當前調(diào)試函數(shù)的名字
__FILE__ // 存放文件名的字符串字面值
__LINE__ // 存放當前行號的整形字面值
__TIME__ // 存放文件編譯時間的字符串字面值
__DATE__ // 存放文件編譯日期的字符串字面值