1.认识命名空间
在命名空间中直接定义的实体,不要直接缩进
在命空间中定义的变量、函数、对象,
都称为命名空间中某一个实体
命名空间相当于一个作用域,当全局变量和命名空间内的变量名重复时,就近原则。
匿名命名空间:相当于静态变量的作用,其目的是为了兼容c
只能在本模块内部使用的是什么?不能跨模块使用的是什么?
• C语言中,static变量 static函数都只能在本模块内部使用,外部无法引用
• C++中,匿名命名空间的实体也是只能在本模块内部使用
若是匿名空间的变量和全局变量一样,调用时需注意
2.认识const修饰符(面试常考)
const变量和宏定义变量的区别
-
类型安全:
- const:
const
关键字提供了类型安全,因为它会在编译时进行类型检查。常量由const
关键字定义,它具有特定的类型。 - #define:
#define
宏定义是简单的文本替换,不进行类型检查。它只是在预处理阶段将标识符替换为文本。
- const:
-
作用域:
- const:
const
定义的常量具有作用域,它们受到块作用域的限制。 - #define:
#define
定义的常量是全局的,它们在整个程序中都是可见的。
- const:
-
调试信息:
- const: 使用
const
可以提供更多的调试信息,因为它们具有类型信息,可以在编译器进行检查。 - #define: 使用
#define
宏定义时,由于只是简单的文本替换,可能在调试时会导致较少的信息。
- const: 使用
-
存储方式:
- const:
const
常量通常分配内存,并且可以取地址。 - #define:
#define
定义的常量通常只是简单的文本替换,没有分配内存,因此不能取地址。
- const:
-
表达式的使用:
- const:
const
可以用于定义常量表达式,例如数组大小。 - #define:
#define
定义的常量不能用于定义常量表达式。
- const:
- 推荐使用const代替define。
const修饰的变量必须赋初值且不能修改,属于只读类型
常量指针:
指针常量:
双重const:
3.new和delete表达式
a.若是只有new而不delete时会出现啥问题呢???
答:会发生内存泄漏(面试常考关于内存的问题)
然后加上delete后会发生啥
因此我们申请空间时一定要及时释放空间
b.new申请其他类型的时候用法
上面的构造函数,下一节就会讲,先不要在意
注意:new和delete成对出现,malloc和free成对出现,切不可交叉使用,否则会造成内存泄漏。
c.new和delete与malloc和free的区别
new和delete是c++表达式,而free和malloc是c库函数,还有new在申请空间的同时就会自动初始化,而malloc则不会。
4.引用(reference)
a.引用的认识
举个好理解的例子就是:引用就是起个别名给原名进行绑定
一荣俱荣一损俱损的效果:改变别名也能改变原名的值,同理改变原名的值也能改变别名的值
b.引用和指针的区别
指针和引用的联系与区别
★ 相同点:
1. 都是地址的概念;
指针指向一块内存,它的内容是所指内存的地址;引用是某块内存的别名。
★ 区别:
1. 指针是一个实体,而引用仅是个别名;
2. 引用使用时无需解引用(*),指针需要解引用;
3. 引用只能在定义时被初始化一次,之后不可变;指针可变;
4. 引用没有 const,指针有 const;
5. 引用不能为空,指针可以为空;
6. “sizeof 引用”得到的是所指向的变量(对象)的大小,而“sizeof 指针”得到的是指针本身(所指向的变量或对象的地址)的大小;
7. 指针和引用的自增(++)运算意义不一样;
8.从内存分配上看:程序为指针变量分配内存区域,而引用不需要分配内存区域。
c.引用作为参数进行传递的优势
从上面用看出:1.若是引用进行传递参数可以减少内存的开销,因为访问的是原对象的直接地址。
2.而且更加简洁直观看出代码的过程,方便阅览代码,且提高运行效率。
d.引用作为返回值的优势
1.若是引用作为返回值可以减少内存的开销,因为访问的是原对象的直接地址。
2.而且更加简洁直观看出代码的过程,方便阅览代码,且提高运行效率。
3.返回引用的变量的生命周期一定要大于该函数的生命周期。
4.正确使用引用返回值:若是返回的是堆空间的引用切记要自行回收,否则别轻易使用 该类型作为返回值。(如下就是错误案例)
正确案例:
注意:非必要不用堆空间作为引用返回值
5.C++中的强制转换
C的简单粗暴,C++这四种可以分场景,相对来说更安全,且容易查找grep -rn "static_cast" ./
a. static_cast强制转换(常用)
常用形式:1)基本数据类型转换
2)void* ==> 其他类型
3)基类与派生类转换(类方面的知识,下一节内容见面)
b. const_cast(去掉常量属性)
6.函数重载
在C++中,编译器会自动名字改编的,其目的是为了减少程序员的代码操作
而在C语言中编译器则是不会这样处理的,因为在C语言中没有函数重载这一说命
7.混合编程
C++与c进行混合编程,兼容c的代码,提出了混合编程
更加简便的方式:使C的源码既能够在C中以C的形式进行调用也能在C++中以C的形式进行调用,内置宏#ifdef __cplusplus #endif
8.默认参数
注意:默认参数从右边往左边生效
注意事项2:最好是在声明时候写默认参数,如果声明时候不写默认参数,而在定义时候写默认参数,则函数调用在函数定义之后
9.bool类型
任何非0值就是true,0值就是false
剩余内容下节见,兄弟们,制作不易,感谢点赞关注