Inline Function
Intro
编译时将Inline Function展开置于被调用位置
编译器会检查一个function是否适合内联,若函数内容太多或者存在递归调用则不会这么做
Macro V.S. Inline
主要是参数传递的区别
宏定义函数只是 text substitution,参数传递不具备语义,例如
#define SQUARE(X) ((X) * (X)) ... int c = 1; SQUARE(c++); // => ((c++) * (c++))
内联函数的参数传递则具备语义
Reference Variable
Intro
int a = 0; int& ref = a;
引用变量必须”引用”某个变量(const引用变量可以是常量),所以初始化时必须被一个函数赋值
引用变量与原变量地址相同
引用变量不能更换引用的原变量
Reference Parameter
通过复制引用而非值进行传递,对其的修改会同步更新原变量的值
若不希望函数内部对外部变量有修改,则:
int f(const int& x);
若无const修饰,则不能传一个右值 / 类型不匹配(无论能不能隐式cast)的变量给引用参数
对于const引用参数,上述操作是可行的,因为对于上述invalid参数,函数会自动为const引用变量创建一个临时的引用变量指向传进来的值;对valid参数不会这么做
Best Practice:若语义合适,尽可能用const修饰参数