内联函数(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;
}

特点

  1. 编译器会将函数调用展开成函数体代码。
  2. 增大代码的体积。
  3. 可以减少调用函数时的开销。开栈和回收栈空间的操作。
  4. 内联函数有函数最基本的特性,比如语法检测,传参等。

注意

  1. 尽量不要内联超过10行的函数。
  2. 有些函数即使声明为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;
}