C++语法篇(一)

章节介绍

本篇主要记录一些零碎语法,一些比较重要的会挑出来单独做一篇。

缺省参数

何为备胎?备胎,也叫舔狗。所谓备胎就是当别人需要你的时候才会想起你,不需要你的时候你是谁?永远都是一个替代品。缺省参数就类似于现实中的舔狗和备胎,当没有参数传递时才会使用缺省参数给的默认参数。
缺省参数带来了哪些好处?
类似于顺序表的开辟空间,当初始的容量为0时,我们需要判断容量是否为0之后才能为顺序表进行扩容。有了缺省参数就可以省略这个判断条件,使用者可以自己选择初始分配空间的大小,如果选择不传参数,则使用默认缺省参数进行替代。

    void SeqListInit(SeqList* ps,int capacity = 4)
    {
        //检查空指针
    	assert(ps);
     	assert(capacity == 0);
     	
    	ps->_a = NULL;
    	ps->_size = 0;
    	ps->_capacity = capacity;
    }
半缺省和全缺省

何为半缺省:
半缺省不代表函数有一半的参数都是缺省参数,而是至少有一个缺省值,但又不是全部都是缺省值就都是半缺省型的。例如:

void test1(int a,int b = 10,int c = 10){};

半缺省参数要注意:所有缺省参数只能跟在非缺省参数的后面,否则编译器不能分清参数传给的是默认缺省参数还是非缺省参数。

void test1(int a = 10, int b) {}// 非法的
void test2(int a,int b = 10,int c) {}// 非法的

何为全缺省:
全缺省就是所有参数都有缺省值,即使不传参,函数也能有参数可以使用默认的缺省参数作为函数参数,全缺省一般都是比较推荐的写法。

void test1(int a = 10,int b = 10,int c = 10){};

内联函数

C语言部分我们应该都学过宏,宏是一种代码替换的写法。但是宏的缺点就比较多。

一、类型不明确
二、需要将该扩的括号都扩起来,容易出错,对新手不友好。
三、宏不支持调试

考虑到宏有时候比较难写,C++就在保留宏的基础上增加了内联函数的概念。内联函数同样是对代码较少的一些函数进行替换,但写法是使用函数的写法,且在Debug下支持调试。

正常情况加Dubug无优化调试,与其他正常的函数一样,需要去call下 func函数的地址才能进入函数进行调试。
在这里插入图片描述
在这里插入图片描述修改属性:
在这里插入图片描述在这里插入图片描述
修改完属性后就可以在Debug下观察内联函数的展开了。当我们转到汇编观察在调用函数的地方不再是call func的地址了,而是直接将两个数字相加,这说明内联函数是被展开的状态。
在这里插入图片描述
内联一定展开?
内联函数一定会展开,但加了inline却不一定是内联!inline只是给编译器的一种建议或者声明。告诉编译器我希望这个函数它是内联,但是否属于内联主要取决于编译器的选择。一般编译器会选择代码逻辑不超过十行的函数作为内联函数。
下面这段代码转到汇编之后,可以发现编译器并没有将它作为内联函数展开。 (声明一下我并没有将属性改回去),而是调用call func的地址,这说明该函数编译器并没有让它成为内联函数。
在这里插入图片描述在这里插入图片描述
总结:
内联函数解决了宏晦涩难懂的问题,新手学会函数就可以写内联,且相较于宏更不容易写错。内联的类型明确,且内联可以进行调试。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值