栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

C++语法篇(一)

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

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的地址,这说明函数成为内联函数。

总结:
内联函数解决了宏晦涩难懂的问题,新手学会函数就可以写内联,且相较于宏更不容易写错。内联的类型明确,且内联可以进行调试。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/997183.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号