C++缺省参数详解

 

在C++中,我们经常需要定义函数并给它们传递一些参数。有时候,某些参数的值是不经常改变或者只有特殊情况下才需要指定,这时候我们可以用缺省参数来简化代码。

什么是缺省参数?

缺省参数是 声明或定义函数时 为函数的 参数指定一个缺省值 。在调用该函数时,如果没有指定实参则采用该 形参的缺省值,否则使用指定的实参。

缺省参数语法

缺省参数语法如下所示:

void func(int a, int b = 0, int c = 0);

这里,func函数有三个参数,其中bc都被设置了默认值。如果在调用func时只传入一个参数,那么bc的值将分别是0。

缺省参数的使用

下面的代码演示了如何使用缺省参数:

#include <iostream>
using namespace std;

void func(int a, int b = 0, int c = 0) {
    cout << "a = " << a << ", b = " << b << ", c = " << c << endl;
}

int main() {
    func(10);         // 输出:a = 10, b = 0, c = 0
    func(10, 20);     // 输出:a = 10, b = 20, c = 0
    func(10, 20, 30); // 输出:a = 10, b = 20, c = 30
    return 0;
}

在上述示例中,func函数有三个参数,其中bc都被设置了默认值。当我们在调用func时只传入一个参数(即a),那么bc的值将分别是0,否则会使用传入的实参来覆盖缺省参数的默认值。

缺省值可以是哪些?

尽量使其是全局变量或常量。

实际上,在 C++ 中定义默认参数时,确实可以使用常量表达式和全局变量表达式,但也可以使用其他编译期可知的表达式,例如静态成员变量、枚举值等。所以缺省值并不一定必须是常量或全局变量。

下面是一些例子:

// 使用静态成员变量作为默认参数
class MyClass {
public:
    static int default_value;
    void foo(int x = default_value);
};

int MyClass::default_value = 42;

void MyClass::foo(int x) {
    // ...
}

// 使用枚举值作为默认参数
enum my_enum { A, B, C };
void bar(my_enum e = A) {
    // ...
}

在上述示例中,我们使用了静态成员变量和枚举值作为函数参数的默认值。尽管它们不是常量或全局变量,但它们都是编译期可知的常量表达式,因此可以用作默认参数。

需要注意的是,这里的“编译期可知”是指计算表达式的值所需的所有信息都可以在编译期解决,这样就可以在编译期确定默认参数的值。任何不能在编译期解决的表达式都不能用作默认参数,因为它们的计算可能需要在运行时进行,并且无法在编译器对函数签名进行分析时获得。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值