Answers:
这是传递模式作为可选参数的示例
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
NULL
表示NULL指针,即使它被定义为文字0
。它不是常数零的通用名称。对于整数(非指针),应使用数字:int mode = 0
。
关于默认参数用法的一个重要规则:
默认参数应在最右端指定,一旦指定了默认值参数,就无法再次指定非默认参数。例如:
int DoSomething(int x, int y = 10, int z) -----------> Not Allowed
int DoSomething(int x, int z, int y = 10) -----------> Allowed
int foo(int x, int y = 10, int z = 10)
要调用foo(1,2)
该函数,该怎么办,所以只给出一个可选参数。我似乎无法自己使用它。
对于某些人来说,如果有多个默认参数,可能会很有趣:
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/
使用默认参数
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 )
随着C ++ 17中std :: optional的引入,您可以传递可选参数:
#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