C++基础一(看这一篇就够了)

1.认识命名空间

        在命名空间中直接定义的实体,不要直接缩进

        在命空间中定义的变量、函数、对象,
        都称为命名空间中某一个实体

        命名空间相当于一个作用域,当全局变量和命名空间内的变量名重复时,就近原则。

        

       匿名命名空间:相当于静态变量的作用,其目的是为了兼容c

     

        只能在本模块内部使用的是什么?不能跨模块使用的是什么?
        • C语言中,static变量 static函数都只能在本模块内部使用,外部无法引用
        • C++中,匿命名空间的实体也是只能在本模块内部使用

          若是匿名空间的变量和全局变量一样,调用时需注意

        

2.认识const修饰符(面试常考)

const变量和宏定义变量的区别

  1. 类型安全:

    • const: const关键字提供了类型安全,因为它会在编译时进行类型检查。常量由const关键字定义,它具有特定的类型。
    • #define: #define 宏定义是简单的文本替换,不进行类型检查。它只是在预处理阶段将标识符替换为文本。
  2. 作用域:

    • const: const定义的常量具有作用域,它们受到块作用域的限制。
    • #define: #define 定义的常量是全局的,它们在整个程序中都是可见的。
  3. 调试信息:

    • const: 使用 const 可以提供更多的调试信息,因为它们具有类型信息,可以在编译器进行检查。
    • #define: 使用 #define 宏定义时,由于只是简单的文本替换,可能在调试时会导致较少的信息。
  4. 存储方式:

    • const: const 常量通常分配内存,并且可以取地址。
    • #define: #define 定义的常量通常只是简单的文本替换,没有分配内存,因此不能取地址。
  5. 表达式的使用:

    • const: const 可以用于定义常量表达式,例如数组大小。
    • #define: #define 定义的常量不能用于定义常量表达式。
  6. 推荐使用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

剩余内容下节见,兄弟们,制作不易,感谢点赞关注

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值