<文章原创,转载请说明出处,联系信箱623730587@qq.com>
一、编程学习在于坚持,其实任何行业亦是如此,每天学习一点点,日久比见功效,就像我经常读的一本电子杂志,
我每天大概读4篇左右的文章,三年以来从未间断,遇到好的文章,我便收藏先来,近期查看收藏目录,竟然多达
三百多篇文章,着实让我大吃一惊。今天先说一下我的近期学习计划,希望我能一直坚持下去,在此贴出学习计
划,希望共勉。
1 每天复习一点c++基础知识,利用15天的时间完成对标准c++的复习。
2 利用15天的时候完成对数据结构和算法,STL&模板的复习。
3 利用40天的时间完成对vc和uc的复习。
4 在此之后就开始写一些比较小型的项目,游戏等等,此段计划以后在此详细列出。
二、拉牛套车,言归正传,开始今天的内容,c++中函数的默认参数(c语言中没有默认参数的概念)。
1 概念:一个函数在定义或者声明时,可以给参数提供默认值,在调用这个函数的时候,如果不给这个参数传实参,
则使用默认的参数值,如果传入参数值,则使用传入的值代替掉默认的值。
2 作用:减少函数的个数,方便调用。
3 限制:1)参数的默认值必须靠右,何为靠右?若一个参数有默认值,则该参数的右边所有参数都必须有默认值。
2)如果函数的声明和实现文件分开时,必须在函数的声明时指定参数的默认值。这一点非常重要哦。特别
是在实际开发中。
4 这里说明一个小的知识点。与本节内容无关,临时想到的。假设有如下打印数组的函数。
void printArr(int *data,int size);
也可以写成这样
void printArr(int data[],int size);
当我们把数组传进一个函数时,对它求sizeof(data),得到的结果将是指针本身的大小(4),而非数组的大小
,所以如果我们要在函数中用到数组的大小,必须用参数传进来,也就是上面的函数的第二个参数。
5 这里给出一个打印数组的函数,注意函数声明和实现时的参数列表的使用。
#include<iostream>
using namespace std;
void printArr(int *data,int size = 1,char separator = ',');
int main()
{
int data[5] = {1,2,3,4,5};
printArr(data,5);
return 0;
}
void printArr(int* data,int size,char separator)
{
cout << "[";
for(int i = 0;i < size - 1; i++)
{
cout << data[i] << separator;
}
cout << data[size-1] << "]" << endl;
}
三、内联函数
1 说内联函数之前,先说说普通函数调用的过程,大家都知道函数的代码是存放在代码区的,现在我在main函数中
要调用这个函数,这个时候编译器就会开辟一个局部函数栈,将函数的参数进行压栈,一旦这个函数调用完毕,
这个局部栈就消失,但是我的程序下面又出现了一次该函数的调用,这个时候又得开辟局部函数栈,这样就造成了
大量的资源浪费。于是内联函数就闪亮登场了。
2 在编译时,请求编译器把函数的二进制代码直接复制到调用的位置,这样减少了函数的开栈和清理栈的开销,提高
效率。
3 内联函数有点像c语言中的宏定义。但是两者又有很大的不同。首先是替换的时期不同,宏是在预编译的时候进行
替换,而内联函数是在编译阶段时进行;其次是内联函数要进行语法检查,而宏没有,不分青红皂白,直接替换;第
三,内联只是一种请求,如果请求成功,则按内联方式调用,如果失败,则按普通方式进行调用,宏替换永远成功。
这有点像寄存器变量的概念(就是在变量前就上register关键字,如果请求成功,则放入寄存器中,如果不成功则按
普通方式存储)。
4 只要在普通函数前面加上inline关键字就是内联函数。
5 若有兴趣,可以使用g++ -S -O2(-O2表示对编译器进行优化,为了提高内联请求成功率)的命令生成汇编文件,看看
调用的情况,如果前面有call就是按照普通方式调用,如果没有call,则为内联的方式。
6 讲完这些,有没有感觉内联函数有点像现在的网络流行语“求带走”(扑哧)。
四、c++中的动态内存分配
new delete
new[] delete[];
1 new和delete都是操作符,而不是函数。
2 为什么动态分配的内存必须释放?毕竟在进程运行结束的时候,程序所占的所有资源(内存资源,cpu资源等等
)都会被操作系统释放,那么问题就来了,既然操作系统能帮我们释放,为什么我们还要画蛇添足呢?这个问题
曾经让我困扰了一整子,后来才知道,原来还有很多7×24小时的程序,这种程序被设计成不会被结束的,还有一
些大型程序,在程序结束之前,这种内存资源的浪费就会逐步增加,直到资源耗尽,就像诸葛亮的人生一样。
今天又结束了。结束之际,贴一个小小的笑话。
问:今天我的心情非常非常不好,为什么?
答:因为我的想象中有一双滑板鞋!!!!!!
每天学习一点C++之三——函数的默认参数
最新推荐文章于 2023-12-31 19:24:58 发布