2010-09-24 132 views
56

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

+1

可能重复的[函数参数的默认值](http://stackoverflow.com/questions/2842928/default-value-of-function-parameter) – 2010-09-24 04:44:47

+7

您不传递选项参数。你传递可选参数! – Chubsdad 2010-09-24 04:57:54

+0

对于比保留哨兵值更加明确的控制,请查看boost :: optional <>。 – 2010-09-24 06:54:28

回答

73

这里是传递模式可选参数的例子

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 
+0

你能提供一些与字符串有关的例子吗? – 2010-09-24 04:20:14

+0

void myfunc(int blah,char mode [] = NULL) – 2010-09-24 04:28:27

+2

NULL表示NULL指针,尽管它将被定义为文字'0'。它不是常数零的通用名称。对于整数(非指针),你应该使用数字:'int mode = 0'。 – UncleBens 2010-09-24 04:53:27

5

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

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 
6

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

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; 
} 
10

个使用默认参数

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) 
19

一个重要的原则相对于默认参数的用法:
默认参数应在最右边的末尾指出,一旦你指定默认值参数,则不能再次指定非默认参数。 例如:

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

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

如果参数数量可变,什么是最右边的? – Chubsdad 2010-09-24 04:57:24

+0

@Chubsdad - 啊..我的不好意思的陈述!第二条语句是否正确地总结了它? “一旦你指定一个默认值参数,你不能再指定非默认参数” – 2010-09-24 05:07:54

+0

因此,如果我理解正确,如果我有多个可选参数,我应该实现所有这些或根本没有?我不能选择使用1个可选参数,但其他参数不可用? – Gerard 2014-04-24 10:19:35

8

这可能是有趣的,一些你在多个默认参数的情况:

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/

+0

这就是我一直在寻找的。使用一个可以处理不同数量参数的函数。在头文件中用默认值声明函数,然后在没有默认参数的情况下定义它,然后你就可以使用它。无需使功能过载 – 2016-10-27 01:57:29