C++: 默认参数和内联函数(inline function)

2018-10-14  本文已影响12人  sajiner

默认参数

C++允许函数设置默认参数,在调用时可以根据情况省略实参,具体规则如下:

int age = 10;
void test() {
    cout << "test()" << endl;
}
void display (int a, int b = 20, int c = age, void (*function)() = test) {
    cout << "a is " << a << endl;
    cout << "b is " << b << endl;
    cout << "c is " << c << endl;
    function();
}
int main(int argc, const char * argv[]) {
    display(100, 30);
    return 0;
}

注意:函数重载、默认参数可能会产生冲突、二义性(建议优先选择使用默认参数)

void display (int a, int b = 10) {
    cout << "a is " << a << endl;
    cout << "b is " << b << endl;
}

void display (int a) {
    cout << "a is " << a << endl;
}

int main(int argc, const char * argv[]) {
   // 此处调用会有二义性
    display(10);
    
    return 0;
}

内联函数(inline function)

使用inline修饰函数的声明或者实现,可以使其变成内联函数

特点:

注意:

inline int sum (int a, int b) {
    return sum(a, b);
}

int main(int argc, const char * argv[]) {
    sum(10, 10);
    return 0;
}

内联函数和宏:

// 此处并不会报错,而是在调用的时候才会报错,且不会说明错误原因
#define sum(a, b) ((a) + (b))10000

int sum(int a, int b) {
    // 此处直接报错
    100000
    return a + b;
}

函数特性:详见如下代码:

// 此处并不会报错,而是在调用的时候才会报错,且不会说明错误原因
#define sum(a) (a) 

int sum(int a) {
    return a + a;
}

int main(int argc, const char * argv[]) {
    int a = 10;
// 此处如果是调用的宏定义,会转为 (a++) + (a++),对a会加两次
// 如果是函数调用,sum(a++)中的a++会先计算,再进行函数内的传值
    int c = sum(a++);
    cout << c << endl;
    return 0;
}
上一篇 下一篇

猜你喜欢

热点阅读