默认实参

    类中成员函数如有默认实参,最好能将默认实参写在成员函数的声明。具体原因如下:

    一.  函数的实现与默认参数无关,所以,没必要让默认实参出现在函数的定义体中。

    二.  函数的默认参数可能会要改动,修改函数的声明比修改函数的定义更方便。

    (以上两点中提及的函数不仅仅局限于类的成员函数)

    三.  现有如下情况:

    有三个文件,分别为a.h, a.cpp, main.cpp

    a.h:

    class A

    {

        public:

            void output(char);

    }

    a.cpp:

    #include<iostream>

    void A::output(char c = 'C')

    {

         std::cout<<c<<std::endl;

    }

    main.cpp:

    #include "a.h"

    int main()

    {

        A  n;

        n.output();

        return 0;

    }

    这段代码将通不过编译。编译器报错为output方法调用0个参数。

    具体原因如下:

    当程序在main()方法中调用output方法时,该方法仅有声明是可见的。而显然,该方法被声明为接受一个字符型参数,无返回。故默认实参调用output方法是非法的。

    同样,下面这段代码同样通不过编译。

    void f(char);

    int main()

    {

        f();

    }

    void f(char c = 'C'){}

    实际上,当函数声明和函数定义同时存在时,将默认实参写在函数定义中是非法的。此种情况只有当函数定义与函数调用位于同一个源文件中,且函数定义先于函数调用被编译时,程序才能通过编译。而这种情况下函数根本就不需要声明。

    故:如果方法有默认实参,将其写在该方法的声明中是必要的。

    PS:在函数声明及函数定义中写入默认实参是非法的。

文章出处:http://hi.baidu.com/binary_sun/blog/item/51f28b5ebe505f48faf2c02a.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值