📅  最后修改于: 2023-12-03 15:10:38.118000             🧑  作者: Mango
在 C++ 中,函数可以有默认参数。默认参数是为了方便调用函数而设置的,如果函数的某个参数没有传入值,那么就会使用该参数的默认值。这篇文章将介绍一些有趣的关于 C++ 中默认参数的事实。
在 C++ 中,如果函数有多个参数,并且其中某些参数有默认值,那么默认值参数必须是函数参数列表中最后面的参数。
// 正确的默认参数声明方式:
void foo(int x, int y = 2, int z = 3);
// 错误的默认参数声明方式:
void bar(int x = 1, int y, int z);
在 C++ 中,默认参数被赋值时会使用右侧的参数值,而不是左侧的参数值。如果右侧的参数是表达式,则该表达式只会在函数被调用时才会被计算。
#include <iostream>
// 只有 x 有默认值,默认值为 y * 2
void foo(int y, int x = y * 2)
{
std::cout << "x = " << x << std::endl;
}
int main()
{
foo(10); // 输出:x = 20
foo(5, 8); // 输出:x = 8
return 0;
}
在 C++ 中,可以对一个函数的默认参数进行重载,来避免在多个函数中重复设置相同的默认参数。
#include <iostream>
void foo(int x, int y = 2, int z = 3)
{
std::cout << "foo(" << x << "," << y << "," << z << ")" << std::endl;
}
// 重载 foo 函数,省略第三个参数,默认为第二个参数的两倍
void foo(int x, int y)
{
foo(x, y, y * 2);
}
int main()
{
foo(1, 2); // 输出:foo(1,2,4)
foo(5, 3, 9); // 输出:foo(5,3,9)
return 0;
}
在 C++ 中,函数指针也可以用作函数的默认参数。但是需要注意的是,函数指针的默认值必须是 nullptr。如果默认参数不是 nullptr,那么编译器会报错。
#include <iostream>
void foo(int x, int (*func)(int, int) = nullptr)
{
if (func != nullptr)
{
std::cout << "result = " << func(x, 2) << std::endl;
}
else
{
std::cout << "no func provided" << std::endl;
}
}
int add(int x, int y)
{
return x + y;
}
int main()
{
foo(10); // 输出:no func provided
foo(10, add); // 输出:result = 12
return 0;
}
以上就是关于 C++ 中默认参数的一些有趣事实的介绍。在编写函数时,可以充分利用默认参数来简化函数调用的过程。