当前位置 博文首页 > yumoz:C++入门(命名空间、缺省参数、函数重载、引用、内联函数)
使用命名空间的目的是对标识符的名称进行本地化,以避免冲突或名字污染。
如下图所展示,用命名空间对scanf进行隔离,于是在main函数中就可实现打印命名空间中定义的值了。因为yumoz::scanf中的“::”是阈作用限定符,所以打印结果是0,否则打印的就不是命名空间中定义的值。
从上述代码可以让你对命名空间有了一个简单的了解,下面给出几种命名空间的使用方式:
对比上述三种展开方式
- 指定展开,虽然麻烦,但是相对规范
- 部分展开,对常用的库内容展开,方便
- 全部展开,在工程中不推荐
定义:在声明或定义函数时为函数的参数指定一个默认值。在调用函数时可以方便使用。下面给出缺省参数的几种情况:
缺省参数不能在函数声明和函数定义中同时出现。
缺省值必须是常量或者全局变量。
C++允许在同一个作用域中声明几个功能类似的同名函数,这些同名函数的形参列表(参数个数、类型或顺序)必须不同。下面给出函数重载的几个例子
int Add(int a, int b)
{
return a + b;
}
double Add(double a, double b)
{
return a + b;
}
int Add(int a, int b,int c)
{
return a + b + c;
}
int Add(int a, int b)
{
return a + b;
}
省略例子。
引用就是给变量起别名。
使用规范:
int a = 1;
int d = 2;
int &ra = a;//ra是a的引用
int &rc = a;//a还可以有引用rc
//int &rc = d;//rc重定义,多次初始化,错误
注意:隐式类型转换会产生临时变量。
语法层:引用是一个别名,没有独立空间,和其引用实体共用同一块空间。
低层上:引用是按照指针方式实现的。
总结:
使用场景:推荐在C++中频繁使用的小函数中使用。
在程序编译时,C++编译器会在调用内联函数的地方展开,没有函数压栈的开销,内联函数提高程序运行效率。
思考:C语言中宏函数有什么缺点?为什么C++要用inline函数?
答:宏的缺点1)不支持调试(预处理阶段展开了)、2)宏语法复杂,容易出错、3)没有类型安全的检查。
思考:inline函数既然这么好,那么可以将所有C++函数都使用inline函数替代吗?
答:不可以,开始已经说明,inline函数适合C++中频繁调用的小函数。inline函数是一种以空间换时间的做法,虽然节省了函数调用的开销,但是如果代码很长或者循环递归的函数时,不适合使用inline函数。
注意:inline函数不建议声明和定义分离。因为inline被展开,没有函数地址,链接就会出错。
** 说明:以上总结是本人的一些学习笔记,如有问题欢迎讨论。
cs