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函数的地址才能进入函数进行调试。
C++语法篇(一)_第1张图片
C++语法篇(一)_第2张图片修改属性:
C++语法篇(一)_第3张图片C++语法篇(一)_第4张图片
修改完属性后就可以在Debug下观察内联函数的展开了。当我们转到汇编观察在调用函数的地方不再是call func的地址了,而是直接将两个数字相加,这说明内联函数是被展开的状态。
C++语法篇(一)_第5张图片
内联一定展开?
内联函数一定会展开,但加了inline却不一定是内联!inline只是给编译器的一种建议或者声明。告诉编译器我希望这个函数它是内联,但是否属于内联主要取决于编译器的选择。一般编译器会选择代码逻辑不超过十行的函数作为内联函数。
下面这段代码转到汇编之后,可以发现编译器并没有将它作为内联函数展开。 (声明一下我并没有将属性改回去),而是调用call func的地址,这说明该函数编译器并没有让它成为内联函数。
C++语法篇(一)_第6张图片C++语法篇(一)_第7张图片
总结:
内联函数解决了宏晦涩难懂的问题,新手学会函数就可以写内联,且相较于宏更不容易写错。内联的类型明确,且内联可以进行调试。

你可能感兴趣的:(C++,c++,开发语言)