命名空间
官方库,自己的库,别人的库
命名空间可以有变量,函数,结构体
展开命名空间 (可嵌套)
展开后就不用::了,但是可能会引起冲突(相当于把墙拆了)
全部展开:
部分展开(部分授权):只要不引起冲突即可使用(部分展开也有冲突就不展开 )
多个.h文件使用一个命名空间函数(名字相同) 可以在一个个文件使用(合并使用)
<<流插入,endl换行符 >>流提取
cout 跟 cin能自动识别类型
缺省参数
两种调用 有参数就是2 五参数默认就是1
全缺省
半缺省
声明和定义不允许同时给缺省参数 ,所以分离时候声明给,定义不给
static可以改变连接属性吧外部链接改成内部链接
函数重载c语言不允许同名函数,c艹可以但是要求函数重载
函数重载:1可以类型不同,2参数不同,3可以顺序不同
函数名相同,参数不同(原理是函数重载)
c++声明和定义不能分离
c++声明和定义不能都有缺省参数,防止编译器分不清(默认声明给定义不给)
重定义链接错误
stackpush函数定义在.h定义又在.cpp里定义
关键字
编译器编译过程:
无法解析的外部符号
说明可能函数只有声明没有定义报了连接错误
c语言报的是函数名连接错误信息
引用 (引用)
&在类型和变量中间是引用
b++,a也会++,此时b和a等同
引用的特性
引用在定义时必须初始化
引用做返回值
传引用返回,相当于返回n的别名
第一次打印1第二次是随机值
第一次调用函数先传参ret返回给了ostream(out),建立栈,把空间覆盖了,第二次调用再去取值就是第一次覆盖的结果
不清理栈结果就是7或随机值所以这些程序没有意义,所以这样的函数引用返回没有意义
结论:
如果函数返回时,出了函数作用域,如果返回对象还在(没有给系统),则可以使用引用返回,如果已经返还给系统了,则必须使用船只返回
传引用传参,传引用返回优势
读写一体:
常引用
引用好比一个人的权限,在引用中 权限可以平移(平替不变),可以缩小,但是不可以放大
下面也可以,且x的修改会影响y,因为是引用y就是x (y相当于带上紧箍的x(孙悟空))
赋值可以(因为是复制拷贝)
c++类型转换会有临时变量(临时变量具有常性)相当于权限放大用const相当于权限没有放大
值拷贝不涉及权限放大问题, 临时对象(a)具有常性 所以前面要加const
const int & ret=fun() 加了const引用后会延长生命周期
![]()
引用和指针的不同
宏缺点和优点
优点:没有类型的限制,可以替换,针对频繁调用的小函数可以减少建立栈提高效率
缺点:容易出错
宏函数 宏后面不能给分号; +号的优先级比与或高
内联函数
优势:不会建立栈
内联函数:不能定义和声明分开到两个文件,不然会引起链接错误
声明和定义分开不能直接调用,可以间接调用展开,因为没必要生成指令进入符号表生成地址,间接调用直接就展开f()了
所以内联函数就直接定义到.h文件
只有声明没办法展开只能call地址但是符号表没有
inline:会在调用的地方展开(跟调用功能相同)
不能所有地方都用内联函数不然会引起代码膨胀