【C++】函数参数扩展 ( 默认参数 | 默认参数定义规则 | 默认参数定义在参数列表末尾 )


博客总结 :

  • 在 声明 函数时 , 为 函数参数 定义一个默认值 ;
  • " 默认参数 " 必须 定义在 参数列表 的 末尾 ;




一、默认参数




1、默认参数简介


" 默认参数 " 概念 : C++ 语言 中的 函数 , 可以在 声明 函数时 , 为 函数参数 定义一个默认值 ;

" 默认参数 " 运行机制 : 在调用 有默认参数值 的 函数时 , 如果没有提供 某个有默认值参数 的 实参 , 那么编译器在 编译阶段 , 就会使用默认值当做实参 ;

" 默认参数 " 可以 简化函数调用 和 提高代码重用性 ;


2、代码示例 - 默认参数


下面的代码中 , 为 void fun(int num = 5) 函数 , 提供了默认参数值 5 ;

如果调用 fun 函数 , 不传入参数 , 则使用默认参数值 5 ; 不传入参数 , 打印的值为 5 ;

    // 不传入参数 , 使用默认参数值 5 
    fun();

如果调用 fun 函数 , 显示传入参数 , 则使用传入的参数 ; 传入参数 7 , 则打印的值为 7 ;

    // 显式传入参数值7
    fun(7);

代码示例 :

// 导入标准 io 流头文件 其中定义了 std 命名空间
#include <iostream>
// 导入 std 命名空间
using namespace std;

// 设置了默认参数的函数
void fun(int num = 5) {
    
    
    cout << "num = " << num << endl;
}

int main() {
    
    
    // 不传入参数 , 使用默认参数值 5 
    fun();
    // 显式传入参数值7
    fun(7);
    

    // 控制台暂停
    system("pause");

    return 0;
}

执行结果 :

num = 5
num = 7
请按任意键继续. . .

在这里插入图片描述





二、默认参数定义规则




1、默认参数定义在参数列表末尾


" 默认参数 " 必须 定义在 参数列表 的 末尾 ;

一旦在函数的 参数列表 中出现了 " 默认参数 " , 那么 之后的所有参数 都必须有 默认参数 , 否则 编译时 会报错 ;


2、反面示例 - 默认参数后有普通参数编译报错


在下面的函数 void fun(int num, int num1 = 5, int num2) 中 , 第三个参数 num2 是普通的参数 , 只要出现了第一个默认参数 , 之后的所有参数都必须是默认参数 ;


反面代码示例 :

// 导入标准 io 流头文件 其中定义了 std 命名空间
#include <iostream>
// 导入 std 命名空间
using namespace std;

// 设置了默认参数的函数
void fun(int num, int num1 = 5, int num2) {
    
    
    cout << "num = " << num << " , num1 = " << num1 << " , num2 = " << num2 << endl;
}

int main() {
    
    
    // 显式传入参数值7
    fun(7);
    

    // 控制台暂停
    system("pause");

    return 0;
}

执行结果 :

1>------ 已启动生成: 项目: HelloWorld, 配置: Debug Win32 ------
1>Hello.cpp
1>Y:\002_WorkSpace\002_VS\HelloWorld\HelloWorld\Hello.cpp(7): error C2548: “fun”: 缺少形参 3 的默认实参
1>Y:\002_WorkSpace\002_VS\HelloWorld\HelloWorld\Hello.cpp(13,10): fatal error C1903: 无法从以前的错误中恢复;正在停止编译
1>“C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.24.28314\bin\HostX86\x86\CL.exe”中的内部编译器错误
1>  请选择 Visual C++
1>“帮助”菜单上的“技术支持”命令,或打开技术支持帮助文件来获得详细信息
1>已完成生成项目“HelloWorld.vcxproj”的操作 - 失败。
========== 生成: 成功 0 个,失败 1 个,最新 0 个,跳过 0==========

在这里插入图片描述


3、正面示例 - 默认参数需要放在最后


下面的 函数参数 中 , num 是 普通参数 , 没有默认值 ;

后面两个 num1 和 num2 都是有 默认值 的参数 ;

之后如果还有参数 , 也必须有默认值 ;

如果想要设置没有默认值的参数 , 那么必须放在前面 ;

// 设置了默认参数的函数
void fun(int num, int num1 = 5, int num2 = 7) {
    
    
    cout << "num = " << num << " , num1 = " << num1 << " , num2 = " << num2 << endl;
}

完整代码示例 :

// 导入标准 io 流头文件 其中定义了 std 命名空间
#include <iostream>
// 导入 std 命名空间
using namespace std;

// 设置了默认参数的函数
void fun(int num, int num1 = 5, int num2 = 8) {
    
    
    cout << "num = " << num << " , num1 = " << num1 << " , num2 = " << num2 << endl;
}

int main() {
    
    
    // 显式传入参数值7
    fun(7);
    

    // 控制台暂停
    system("pause");

    return 0;
}

执行结果 :

num = 5
num = 7
请按任意键继续. . .

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/han1202012/article/details/132670772
今日推荐