函数参数的扩展(六)-创新互联

    在 C++ 中可以在函数声明时为参数提供一个默认值,当函数调用时没有提供参数的值时,则使用默认值。函数的默认值必须在函数声明中指定,那么在函数定义中是否可以出现参数的默认值呢当函数声明和定义中的参数默认值不同时会发生什么呢?我们通过实例代码进行分析

创新互联公司总部坐落于成都市区,致力网站建设服务有成都网站设计、成都网站制作、网络营销策划、网页设计、网站维护、公众号搭建、微信小程序定制开发、软件开发等为企业提供一整套的信息化建设解决方案。创造真正意义上的网站建设,为互联网品牌在互动行销领域创造价值而不懈努力!
#include 

int mul(int x = 0);

int main(int argc, char *argv[])
{
    printf("mul() = %d\n", mul());
    printf("mul(-1) = %d\n", mul(-1));
    printf("mul(2) = %d\n", mul(2));

    return 0;
}

int mul(int x)
{
    return x * x;
}

        我们看到在声明函数 mul 时,我们将参数默认声明为 0,我们来看看这个程序可以编译成功吗?如果可以,在 main 函数中会打印出什么?

函数参数的扩展(六)

        我们发现它没有报错,也就是说在 C++ 中支持在函数声明时,支持参数默认值。那我们试试在 C 语言比那一起中是否也支持这样的写法呢?

函数参数的扩展(六)

        我们看到这样的写法在 C 语言的编译器中是不支持的,那么我们试试在定义中给默认值,声明中不给呢,看 g++ 编译器是否支持

函数参数的扩展(六)

        我们看到它报错了,所以只能在声明时给参数默认值。

        那么函数既然支持参数默认值,那它在多个参数设置时有没有规则呢?有两条规则:a> 参数的默认值必须从右向左提供;b> 函数调用时使用了默认值,则后续参数必须使用默认值。

        我们以代码为例进行分析

#include 

int add(int x, int y = 1, int z = 2);

int main(int argc, char *argv[])
{
    printf("add(1) = %d\n", add(1));            // 4
    printf("add(1, 2) = %d\n", add(1, 2));        // 5
    printf("add(1, 2, 3) = %d\n", add(1, 2, 3));// 6

    return 0;
}

int add(int x, int y, int z)
{
    return x + y + z;
}

        我们分析下这个代码,默认参数 y 和 z 的值分别为 1 和 2。那么 main 函数中的返回值分别为 1 + 1 + 2 = 4; 1 + 2 + 2 = 5; 1 + 2 + 3 = 6;我们来看看结果是否如此呢?

函数参数的扩展(六)

        我们看到结果确实是如我们所分析的那样。那么我们试试只给 y 默认值,也就是说不遵循从右向左分配,看看会编译成功吗?函数参数的扩展(六)

        我们看到编译报错了,那么如果只想给 y 默认值该怎么做呢?只需把 y 和 z 的位置换下就行,将它放在最右边。

        下来我们来说说函数占位参数,在 C++ 中可以为函数提供占位参数。占位参数只有参数类型声明,而没有参数名声明;在一般情况下,在函数体内部无法使用占位参数。

        我们以代码为例,看看函数占位参数是什么样的

#include 

int func(int x, int);

int main(int argc, char *argv[])
{
    printf("func(1, 2) = %d\n", func(1, 2));

    return 0;
}

int func(int x, int)
{
    return x;
}

        我们试试能否编译通过呢

函数参数的扩展(六)

        我们看到编译是通过的,那么我们是不是觉得这是多此一举呢?明明只是个需要一个参数,却多了一个占位参数。下来我们就来讲下函数占位参数的意义,占位参数与默认参数结合起来使用,兼容 C 语言程序中可能出现的不规范写法。我们还记得之前那么 void func() 和 void func(void) 等价这个问题嘛,在 C 语言中它是不等价的,因为第一个是代表可接受任意多的参数,而后一个是不接受参数。而在 C++ 中它们两个表达的意思是一样的。

        通过对函数占位参数的 学习,总结如下:1、C++ 中支持参数的默认值;2、如果函数调用时没有提供参数值,则使用默认值;3、参数的默认值必须从右向左提供;4、函数调用时使用了默认值,则后续参数必须使用默认值;5、C++ 中支持占位参数,用于兼容 C 语言中的不规范写法。

        欢迎大家一起来学习 C++ 语言,可以加我QQ:243343083。

另外有需要云服务器可以了解下创新互联scvps.cn,海内外云服务器15元起步,三天无理由+7*72小时售后在线,公司持有idc许可证,提供“云服务器、裸金属服务器、高防服务器、香港服务器、美国服务器、虚拟主机、免备案服务器”等云主机租用服务以及企业上云的综合解决方案,具有“安全稳定、简单易用、服务可用性高、性价比高”等特点与优势,专为企业上云打造定制,能够满足用户丰富、多元化的应用场景需求。


文章标题:函数参数的扩展(六)-创新互联
网页链接:http://myzitong.com/article/ipesh.html