【C++】函数参数扩展 ② ( 占位参数 | 占位参数规则 - 必须为占位参数传入实参 | 默认参数与占位参数结合使用 )

2023-10-15 16:49:12 浏览数 (1)

博客总结 :

  • 默认参数 : 在 声明 函数时 , 为 函数参数 定义一个默认值 ;
  • 默认参数规则 : " 默认参数 " 必须 定义在 参数列表 的 末尾 ;
  • 占位参数 : 只声明 参数类型 , 不声明 参数名 ;
  • 占位参数规则 : 占位参数 必须传入 实参值 ;

一、占位参数

1、占位参数简介

占位参数 概念 : 在 C 语言中 , " 占位参数 " 是一种特殊的 函数参数 , 用于在 函数 定义时 预留一个 参数位置 , 只声明 参数类型 , 不声明 参数名 ;

无法访问 : 由于 占位参数 没有 参数名称 , 函数 的 函数体 中 , 无法访问 占位参数 ;

占位参数作用 : " 占位参数 " 为以后得函数留下扩展空间 ;

2、占位参数规则 - 必须为占位参数传入实参

函数 占位参数 使用 : 如果为 函数 定义了 " 占位参数 " , 则使用函数时 , 必须为 占位参数 传入实参 , 否则少一个函数会报错 ;

在函数中 , 定义了 2 个普通参数 , 和 1 个占位参数 :

代码语言:javascript复制
// 为函数设置占位参数
void fun(int num, int num1, int) {
    cout << "num = " << num << " , num1 = " << num1 << endl;
}

如果调用上述 fun 函数时 , 只传入两个普通参数 , 就会报错 :

代码语言:javascript复制
    // 传入 2 个参数
    fun(1, 2);

报错信息如下 :

  • “fun”: 函数不接受 2 个参数
代码语言:javascript复制
1>------ 已启动生成: 项目: HelloWorld, 配置: Debug Win32 ------
1>Hello.cpp
1>Y:02_WorkSpace02_VSHelloWorldHelloWorldHello.cpp(13,13): error C2660: “fun”: 函数不接受 2 个参数
1>Y:02_WorkSpace02_VSHelloWorldHelloWorldHello.cpp(7,6): message : 参见“fun”的声明
1>已完成生成项目“HelloWorld.vcxproj”的操作 - 失败。
========== 生成: 成功 0 个,失败 1 个,最新 0 个,跳过 0 个 ==========

错误代码示例 :

代码语言:javascript复制
// 导入标准 io 流头文件 其中定义了 std 命名空间
#include <iostream>
// 导入 std 命名空间
using namespace std;

// 为函数设置占位参数
void fun(int num, int num1, int) {
    cout << "num = " << num << " , num1 = " << num1 << endl;
}

int main() {
    // 传入 2 个参数
    fun(1, 2);

    // 传入 3 个参数
    fun(1, 2, 3);
    

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

    return 0;
}

二、默认参数与占位参数结合使用


1、结合用法

一旦为 函数 定义了 " 占位参数 " , 则使用函数时 , 必须为 占位参数 传入实参 , 否则少一个函数会报错 ;

但是 占位符 并不是我们需要的参数 , 方法体中也无法访问到 ;

平时开发时 , 一直带着一个不需要的参数 , 没有意义 ;

这里就可以将 占位参数 与 默认参数 结合使用 ,

为 函数 最后一个 占位参数 设置 默认只 2 ;

代码语言:javascript复制
// 为函数设置占位参数
void fun(int num, int num1, int = 2) {
    cout << "num = " << num << " , num1 = " << num1 << endl;
}

调用上述 fun 函数时 , 既可以传入 2 个参数 , 又可以传入 3 个参数 ;

  • 如果传入 2 个参数 , 则最后一个 占位参数 使用默认值 2 ;
  • 如果传入 3 个参数 , 则最后一个 占位参数 使用传入的值 3 ;
代码语言:javascript复制
    // 传入 2 个参数
    fun(1, 2);

    // 传入 3 个参数
    fun(1, 2, 3);

不管 是否 传入 占位参数 , 占位参数 在函数体内 , 都不可访问 ;

2、代码示例 - 占位参数与默认参数结合用法

代码示例 :

代码语言:javascript复制
// 导入标准 io 流头文件 其中定义了 std 命名空间
#include <iostream>
// 导入 std 命名空间
using namespace std;

// 为函数设置占位参数
void fun(int num, int num1, int = 2) {
    cout << "num = " << num << " , num1 = " << num1 << endl;
}

int main() {
    // 传入 2 个参数
    fun(1, 2);

    // 传入 3 个参数
    fun(1, 2, 3);
    

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

    return 0;
}

执行结果 :

代码语言:javascript复制
num = 1 , num1 = 2
num = 1 , num1 = 2
请按任意键继续. . .

0 人点赞