迹忆客 专注技术分享

当前位置:主页 > 学无止境 > 编程语言 > C++ >

C++ 中默认参数的重新定义

作者:迹忆客 最近更新:2023/08/24 浏览次数:

在本文中,您将学习如何处理 C++ 中默认参数错误的重新定义。 C++ 中的默认参数必须在方法或函数的声明或定义中指定,但不能同时指定,因为存在重复。


在函数声明中指定实参以处理 C++ 中默认参数重定义错误

导致默认参数重定义错误的原因是其在头文件中的重定义,每次都会从父文件中调用,导致多次重定义函数或方法。

但是,您可以在非模板函数(或方法)的相同范围内的函数(或方法)的后续声明中添加默认参数。 声明在不同的范围内具有完全不同的默认参数集。

带有默认参数的参数后面的每个参数都应提供默认参数、先前的声明或给定函数声明中的函数参数包。 当您在定义(实现)中设置默认参数时,而不仅仅是在声明中设置默认参数时,会发生默认参数重新定义错误。

代码示例:

#include <iostream>

// to process variables whenever called
void print(int x, int y)
{
    std::cout << "x: " << x << '\n'; // x output
    std::cout << "y: " << y << '\n'; // y output
}

int main()
{
    // function declaration
    void print(int x, int y = 3);

    print(7, 4); // in this case, `y` is user-defined variable hence default argument will be neglected
    print(6); // in this case, `y` has no user-defined value hence, it will use default argument

}

输出:

x: 7
y: 4
x: 6
y: 3

如果您的函数(或方法)中有多个参数,则默认参数必须列在所有非默认参数之后,例如 void my_function (int a, char b);。

在 C++ 中,默认参数不会直接导致布尔参数的 tarpit,但这些参数会使它们的有害影响变得更糟,因此,布尔 tarpit 的处理变得极其复杂。

在函数定义中指定参数以处理 C++ 中默认参数重新定义错误 如果任何函数参数具有默认参数,则函数调用可以从调用者检索任何函数参数的参数,并且如果调用者不提供参数,则使用该特定参数的默认参数的值 。 默认参数一旦声明,就不能因为重复而重新声明,这意味着默认参数可以在函数定义中声明。

默认参数的前向声明是声明默认参数而不是在函数定义中声明它的最佳实践之一。

代码示例:

#include <iostream>

void print(int x, int y=4) // 4 is the default argument
{
    std::cout << "x: " << x << '\n';
    std::cout << "y: " << y << '\n';
}

int main()
{
    print(1, 2); // y will use user-supplied argument 2
    print(3); // y will use default argument 4
}

// in case of multiple default arguments
void printmulti(int x=10, int y=20, int z=30)
{
    std::cout << "x: " << x << '\n';
    std::cout << "y: " << y << '\n';
    std::cout << "z: " << z << '\n';
}

输出:

x: 1
y: 2
x: 3
y: 4

默认参数在语法上出现在函数(或方法)声明中,但默认参数本身的行为类似于定义,因为每个翻译单元只能有一个。 不允许在函数定义中重复默认参数的值,这意味着函数接口的一部分在其实现位置是不可见的。

默认参数的定义在一处而求值在另一处导致中间 C++ 方面的混乱,例如名称查找、访问控制和模板实例化。

转载请发邮件至 1244347461@qq.com 进行申请,经作者同意之后,转载请以链接形式注明出处

本文地址:

相关文章

Arduino 中停止循环

发布时间:2024/03/13 浏览次数:444 分类:C++

可以使用 exit(0),无限循环和 Sleep_n0m1 库在 Arduino 中停止循环。

Arduino 复位

发布时间:2024/03/13 浏览次数:315 分类:C++

可以通过使用复位按钮,Softwarereset 库和 Adafruit SleepyDog 库来复位 Arduino。

Arduino 的字符转换为整型

发布时间:2024/03/13 浏览次数:181 分类:C++

可以使用简单的方法 toInt()函数和 Serial.parseInt()函数将 char 转换为 int。

Arduino 串口打印多个变量

发布时间:2024/03/13 浏览次数:381 分类:C++

可以使用 Serial.print()和 Serial.println()函数在串口监视器上显示变量值。

Arduino if 语句

发布时间:2024/03/13 浏览次数:123 分类:C++

可以使用 if 语句检查 Arduino 中的不同条件。

Arduino ICSP

发布时间:2024/03/13 浏览次数:214 分类:C++

ICSP 引脚用于两个 Arduino 之间的通信以及对 Arduino 引导加载程序进行编程。

使用 C++ 编程 Arduino

发布时间:2024/03/13 浏览次数:127 分类:C++

本教程将讨论使用 Arduino IDE 在 C++ 中对 Arduino 进行编程。

Arduino 中的子程序

发布时间:2024/03/13 浏览次数:168 分类:C++

可以通过在 Arduino 中声明函数来处理子程序。

扫一扫阅读全部技术教程

社交账号
  • https://www.github.com/onmpw
  • qq:1244347461

最新推荐

教程更新

热门标签

扫码一下
查看教程更方便