默认实参的理解

一直受默认实参的困扰,可能还是自己太懒,查找资料得出结论:

将默认实参放在函数的声明中,并且在函数定义中没有默认实参!也就是说,函数实参只存在于声明中.


1.为什么默认实参从声明中删除,而在定义中添加会报错?(错误提示:error C2660: “xxx”: 函数不接受 0 个参数)

假定有三个文件,分别为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方法是非法的。


2.为什么在声明和定义中都添加,也会报错?(错误提示:error C2572: “xxx”: 重定义默认参数)

原因是因为书上说的:在一个文件(准确的说,是一个作用域)中只能为一个形参指定默认实参一次。当编译的时候,头文件会和源文件结合,这时,就会出现多次指定默认形参的情况.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值