码迷,mamicode.com
首页 > 编程语言 > 详细

C++默认参数(转)

时间:2014-10-16 17:36:52      阅读:171      评论:0      收藏:0      [点我收藏+]

标签:blog   http   使用   ar   文件   sp   div   on   log   

函数的默认参数值,即在定义参数的时候同时给它一个初始值。在调用函数的时候,我们可以省略含有默认值的参数。也就是说,如果用户指定了参数值,则使用用户指定的值,否则使用默认参数的值。

bubuko.com,布布扣
void Func(int i = 1, float f = 2.0f, double d = 3.0)
{
    cout << i << ", " << f << ", " << d << endl ;
}

int main(void)
{
    Func() ; // 1, 2, 3
    Func(10) ; // 10, 2, 3
    Func(10, 20.0f) ; // 10, 20, 3
    Func(10, 20.0f, 30.0) ; // 10, 20, 30
return 0 ;
}
bubuko.com,布布扣

参数的值也可以是表达式,这样,表达式将在函数被调用的时候求值,比如下面的func函数,第二个参数值是通过函数调用得到的,每次调用func函数时,该函数都会调用getValue来获取b的值。

bubuko.com,布布扣
class Test
{
public:

    static int getValue()
    {
        return 1;
    }

    int func(int a, int b = getValue())
    {
        return b;
    }
} ;
bubuko.com,布布扣

如果某个参数是默认参数,那么它后面的参数必须都是默认参数

下面两种情况都可以

void Func(int i, float f = 2.0f, double d = 3.0) ;
void Func(int i, float f, double d = 3.0) ;

但是这样就不可以

void Func(int i, float f = 2.0f, double d) ;

默认参数的连续性能保证编译器正确的匹配参数。所以可以下这样一个结论,如果一个函数含有默认参数,那么它的最后一个参数一定是默认参数。

默认参数可以放在函数声明或者定义中,但只能放在二者之一

通常我们都将默认参数放在函数声明中,因为如果放在函数定义中,那么将只能在函数定义所在地文件中调用该函数。(为什么呢?)

.h文件

class TestClass
{
public:
    void Func(int i, float f, double d) ;
};

.cpp文件

#include "TestClass.h"

void TestClass::Func(int i = 1, float f = 2.0f, double d = 3.0)
{
    cout << i << ", " << f << ", " << d << endl ;
}

像上面这样,只能够在TestClass.cpp中调用Func函数。岂不是很痛苦?

函数重载时谨慎使用默认参数值

比如下面两个重载函数func,一个只接受一个参数,而另一个接受两个参数,包括一个默认参数。

bubuko.com,布布扣
class Test
{
public:
    int func(int a)
    {
        return a;
    }

    int func(int a, int b = 1)
    {
        return a + b;
    }
} ;
bubuko.com,布布扣

如果像下面这样调用函数

bubuko.com,布布扣
int main(void) 
{ 
    Test test;
    int result = test.func(1);

    getchar() ; 
    return 0 ; 
} 
bubuko.com,布布扣

则编译器就不知道选择哪个函数,这就造成了混淆。

==

作者:zdd

C++默认参数(转)

标签:blog   http   使用   ar   文件   sp   div   on   log   

原文地址:http://www.cnblogs.com/sage-blog/p/4028736.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!