C++内联函数与表达式
内联函数(inline function)
使用inline修饰函数的声明或实现,可以使其变成内联函数。
与宏的区别
#define add(a, b) a + b
inline int f_add(int a, int b)
{
return a + b;
}
int main()
{
int a = 10;
int c = add(1, 2); // c = 3
int d = add(++a); // d = 24。 int d = ++a + ++a;
int e = f_add(++a); // e = 22;
return 0;
}
特点
- 编译器会将函数调用展开成函数体代码。
- 会增大代码的体积。
- 可以减少调用函数时的开销。开栈和回收栈空间的操作。
- 内联函数有函数最基本的特性,比如语法检测,传参等。
注意
- 尽量不要内联超过10行的函数。
- 有些函数即使声明为
inline,也不一定会被编译器内联,比如递归。
inline func();
inline int sum(int, int);
inline func()
{
cout << "func1" << endl;
cout << "func2" << endl;
cout << "func3" << endl;
}
inline int sum(int a, int b)
{
return a + b;
}
int main()
{
func();
func();
func();
// 它就类似与下面的,有种替换的感觉,但是和宏替换又不一样
cout << "func1" << endl;
cout << "func2" << endl;
cout << "func3" << endl;
cout << "func1" << endl;
cout << "func2" << endl;
cout << "func3" << endl;
cout << "func1" << endl;
cout << "func2" << endl;
cout << "func3" << endl;
return 0;
}
表达式
C++的有些表达式是可以被赋值的。
int main()
{
int a = 1, b = 2;
(a = b) = 3; // a = 3, b = 2;
(a < b ? a : b) = 4; // a = 2, b = 4; 因为前面一行已经将a修改成了2
return 0;
}
