目录
1.命名空间:
第一次打印在全局中找,rand为函数名,此时打印的为函数指针(地址);
第二次打印在bit命名空间中找 rand为变量(0),打印结果为0;
using namespace __(命名空间名)-->>直接展开命名空间;
//项目中,尽量不要using namespace std;
//日常练习用using namespace std;
//项目中:指定命名空间访问+展开常用(using std::cout)
2.缺省参数:
从左往右给,必须从右往左缺省,不能间隔;
缺省参数不能在函数声明和定义中同时出现(声明说了算);
全缺省/半缺省;
3.函数重载:
返回值无法构成重载,传参可以重载;C语言不能重载,必须函数名字不同(不同函数);
4.引用:
1.引用必须在定义时初始化;
2.一个变量可以有多个引用;
3.引用一旦引用一个实体,再不能引用其他实体(区别于指针)
4.权限可以缩小,但不能放大(const);
5.
--用处:
1.做参数--a、输出型参数; b、大对象传参,提高效率;c、传值返回
a.
5 .指针vs引用:
1.使用场景
2.语法特性及底层原理
指针和引用用途基本是相似的
指针更强大,更危险,更复杂。
引用相对局限一些,更安全,更简单
引用和指针的不同点:
(部分)如上:
4.在sizeof中含义不同:引用结果为引用类型的大小,但指针始终是地址空间所占字节个数(32位平台占4个字节)
5.引用自加即引用的实体+1,指针自加即指针向后偏移一个类型的大小;
6.有多级指针,但是没有多级引用;
7.访问实体方式不同,指针需要显式解引用,引用编译器自己处理;
8.引用比指针使用起来相对更安全;
6.为什么C语言不支持函数重载,C++支持?
C++在编译时产生符号表时,对重载的函数名会有一套修饰规则(i为int类型首字母,d为double类型首字母),从而可以区分找到其函数的地址调用栈帧,但C语言没有修饰规则,符号表区分不出函数,找不到地址
7.C与C++能互相调用库吗?->可以。
8.内联函数
编译时C++编译器会在调用内联函数的地方展开,没有函数压栈的开销,~~提升程序运行的效率。
C->宏函数
C++->inline
宏的优点:a、复用性变强 b、宏函数提高效率,减少栈帧建立
宏的缺点:a、可读性差 b、没有类型安全检查 c、不方便测试
错误展示:
正确示范:
1.inline是一种以空间换时间的做法,省去调用函数额外开销,所以代码很长或者有递归的函数不适宜,(如果展开,导致编译出来程序变大)使用作为内联函数。
2.inline对于编译器而言只是一个建议,编译器会自动优化,如果定义为inline的函数体内有上述等,编译器优化时会忽略内联。
3.inline不建议声明和定义分离,分离会导致链接错误,因为inline被展开,就没有函数地址了,连接就会找不到。
9.auto关键字:
//自动迭代,自动判断结束。
//范围for
//范围for不能auto数组;
10.nullptr:
NULL宏定义值为零,作为参数传递时有时是int类型,有bug;提供了nullptr;