如何在 C + + 中将可选参数传递给方法?

如何在 C + + 中将可选参数传递给方法? 任何代码片段..。

225232 次浏览

用逗号分隔它们,就像没有默认值的参数一样。

int func( int x = 0, int y = 0 );


func(); // doesn't pass optional parameters, defaults are used, x = 0 and y = 0


func(1, 2); // provides optional parameters, x = 1 and y = 2

通常通过为参数设置默认值:

int func(int a, int b = -1) {
std::cout << "a = " << a;
if (b != -1)
std::cout << ", b = " << b;
std::cout << "\n";
}


int main() {
func(1, 2);  // prints "a=1, b=2\n"
func(3);     // prints "a=3\n"
return 0;
}

下面是一个将 mode 作为可选参数传递的示例

void myfunc(int blah, int mode = 0)
{
if (mode == 0)
do_something();
else
do_something_else();
}

两种方式都可以调用 myfunc,而且都是有效的

myfunc(10);     // Mode will be set to default 0
myfunc(10, 1);  // Mode will be set to 1

使用默认参数

template <typename T>
void func(T a, T b = T()) {


std::cout << a << b;


}


int main()
{
func(1,4); // a = 1, b = 4
func(1);   // a = 1, b = 0


std::string x = "Hello";
std::string y = "World";


func(x,y);  // a = "Hello", b ="World"
func(x);    // a = "Hello", b = ""


}

注意: 以下内容格式不正确

template <typename T>
void func(T a = T(), T b )


template <typename T>
void func(T a, T b = a )

关于默认参数使用的一个重要规则:
默认参数应该在最右端指定,一旦指定了默认值参数,就不能再指定非默认参数。 例如:

int DoSomething(int x, int y = 10, int z) -----------> Not Allowed


int DoSomething(int x, int z, int y = 10) -----------> Allowed

你们中的一些人可能会感兴趣,在多个默认参数的情况下:

void printValues(int x=10, int y=20, int z=30)
{
std::cout << "Values: " << x << " " << y << " " << z << '\n';
}

给定以下函数调用:

printValues(1, 2, 3);
printValues(1, 2);
printValues(1);
printValues();

产出如下:

Values: 1 2 3
Values: 1 2 30
Values: 1 20 30
Values: 10 20 30

参考资料: http://www.learncpp.com/cpp-tutorial/77-default-parameters/

按照这里给出的例子,但是为了说明头文件的语法,函数前向声明包含可选的参数默认值。

我的档案

void myfunc(int blah, int mode = 0);

Myfile.cpp

void myfunc(int blah, int mode) /* mode = 0 */
{
if (mode == 0)
do_something();
else
do_something_else();
}

通过在 C + + 17中引入 std: : 可选参数,您可以传递可选参数:

#include <iostream>
#include <string>
#include <optional>


void myfunc(const std::string& id, const std::optional<std::string>& param = std::nullopt)
{
std::cout << "id=" << id << ", param=";


if (param)
std::cout << *param << std::endl;
else
std::cout << "<parameter not set>" << std::endl;
}


int main()
{
myfunc("first");
myfunc("second" , "something");
}

产出:

id=first param=<parameter not set>
id=second param=something

参见 https://en.cppreference.com/w/cpp/utility/optional

如果你有函数的声明和定义,只有在声明中才需要指定默认参数