1.默认实参
默认实参放在后面,需要传入的参数放在前面。
传入的参数会从前到后,找到第一个可以传入的参数传入。
int func(int a, int b = 10, int c = 15) {
// 需要输入的参数放在前面
return a * 3 + b * 2 + c;
}
int main() {
int d = 5;
cout << func(d);
}
2.内联函数——inline
内联函数就是在调用点上“内联地展开”。
note : 内联说明只是向编译器发出的一个请求,编译器可以选择忽略这个请求。
3.constexpr函数
函数体内必须有且只有一条return语句。
constexpr int new_sz() { return 42; }
constexpr int foo = new_sz(); // 正确,foo是一个常量表达式
为了能在编译过程中随时展开,constexpr函数被隐式地指定为内联函数。
4.调试帮助
assert预处理宏
assert宏定义在cassert头文件中。预处理名字由预处理器而非编译器管理,因此我们可以直接使用预处理名字而无须提供using声明。我们应该使用assert而不是std::assert,也不需要为assert提供using声明。
assert()包含一个合理的条件,如果条件不成立则中止编译。
int shortL = 5, longL = 10;
assert(shortL < longL);
NDEBUG预处理变量
__func__ // 存放当前调试函数的名字
__FILE__ // 存放文件名的字符串字面值
__LINE__ // 存放当前行号的整形字面值
__TIME__ // 存放文件编译时间的字符串字面值
__DATE__ // 存放文件编译日期的字符串字面值