C++ 默认参数

17 Mar 2025 | 4 分钟阅读

在函数中,参数定义为函数调用时传递的值。传递的值是源,接收函数是目标。

现在让我们详细了解默认参数的概念。

Default arguments in C++

定义

默认参数是函数声明中的一个值,如果调用函数没有向该参数传递任何值,编译器会自动分配该值。

定义默认参数的特性

以下是声明默认参数的规则:

  • 默认参数中传递的值不是常量。如果将值传递给函数,这些值可以被覆盖。否则,保留先前声明的值。
  • 在函数调用期间,值从左到右复制。
  • 所有将获得默认值的值都将位于右侧。

示例

  • void function(int x, int y, int z = 0)
    解释 - 上述函数是有效的。这里的 z 是预定义为默认参数一部分的值。
  • Void function(int x, int z = 0, int y)
    解释 - 上述函数是无效的。这里的 z 是在中间定义的值,不被接受。

编码

输出

25
50
80    

说明

在上面的程序中,我们调用了 sum 函数三次。

  • Sum(10,15)
    当调用此函数时,它到达 sum 的定义。在那里它将 x 初始化为 10,y 初始化为 15,其余值默认设置为零,因为没有传递任何值。所有值相加后输出 25。
  • Sum(10, 15, 25)
    当调用此函数时,x 保持 10,y 保持 15,传递的第三个参数 z 初始化为 25 而不是零。最后一个值保持为 0。x、y、z、w 的和为 50,作为输出返回。
  • Sum(10, 15, 25, 30)
    在此函数调用中,有四个参数值传递到函数中,x 为 10,y 为 15,z 为 25,w 为 30。所有值相加后输出 80。

注意 如果函数被不同的数据类型重载,并且这些数据类型也包含默认参数,则可能导致模糊匹配,从而导致错误。

示例

输出

prog.cpp: In function 'int main()':
prog.cpp:15:20: error: call of overloaded 'sum(int, int)' is ambiguous
  cout << sum(10, 15) << endl; // x = 10, y = 15, z = 0, w = 0
                    ^
prog.cpp:4:5: note: candidate: int sum(int, int, int, int)
 int sum(int x, int y, int z=0, int w=0) // Here there are two values in the default arguments 
     ^
prog.cpp:9:5: note: candidate: int sum(int, int, float, float)
 int sum(int x, int y, float z=0, float w=0) // Here sum is overloaded with two float parameter values    

说明

当我们在调用 sum 函数时,传递所有**参数 (x, y, z, w)** 或 z 或 w 的任何一个参数值时,编译器会混淆应该执行哪个函数。因此,它会产生歧义,导致错误。