C++从新学习和知识梳理

Posted cpulspulsstudy

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C++从新学习和知识梳理相关的知识,希望对你有一定的参考价值。

C内存分配

技术图片

1.static 静态变量

  1.static 局部静态变量生命周期:本程序文件,作用域:被创建函数体内, 可用于计算一个函数的调用次数

  2.static 全局静态变量生命周期:本程序文件,作用域:本程序文件,可用于本程序文件的全局变量使用,区别于其他程序文件

  3.static 类的静态成员,属于类而不属于对象,被这个类的所有对象共有,实现多个对象之间数据共享,存储于一处,

  4.static 静态函数属于类而不属于对象,调用时需要加类作用域

2.C++ 4种强制转换类型

  使用方法:const_cast<type-id>expression;

  1.const_cast,

    1.基本用法:const_cast<type-id>expression

 

    2.使用场景:

 

      a、常量指针转换为非常量指针,并且仍然指向原来的对象

 

      b、常量引用被转换为非常量引用,并且仍然指向原来的对象

 

    3.使用特点:

 

      a、cosnt_cast是四种类型转换符中唯一可以对常量进行操作的转换符

 

      b、去除常量性是一个危险的动作,尽量避免使用。一个特定的场景是:类通过const提供重载时,一般都是非常量函数调用const_cast<const T>将参数转换为常量,然后调用常量函数,然后得到结果再调用const_cast <T>去除常量性。

 

  2.static_cast

    a、用于类层次结构中基类和派生类之间指针或引用的转换

 

    上行转换(派生类---->基类)是安全的;

 

    下行转换(基类---->派生类)由于没有动态类型检查,所以是不安全的。

 

    b、用于基本数据类型之间的转换,如把int转换为char,这种带来安全性问题由程序员来保证

 

    c、把空指针转换成目标类型的空指针

 

    d、把任何类型的表达式转为void类型

 

    使用特点

 

    a、主要执行非多态的转换操作,用于代替C中通常的转换操作

 

    b、隐式转换都建议使用static_cast进行标明和替换

 

  3.dynamic_cast    

    1.基本用法:dynamic_cast<type-id> expression

 

    2.使用场景:只有在派生类之间转换时才使用dynamic_cast,type-id必须是类指针,类引用或者void*。

 

    3.使用特点:

 

      a、基类必须要有虚函数,因为dynamic_cast是运行时类型检查,需要运行时类型信息,而这个信息是存储在类的虚函数表中,只有一个类定义了虚函数,才会有虚函数表(如果一个类没有虚函数,那么一般意义上,这个类的设计者也不想它成为一个基类)。

 

      b、对于下行转换,dynamic_cast是安全的(当类型不一致时,转换过来的是空指针),而static_cast是不安全的(当类型不一致时,转换过来的是错误意义的指针,可能造成踩内存,非法访问等各种问题)

 

      c、dynamic_cast还可以进行交叉转换

  4.reinterpret_cast

    一种万能的高危转换,可以将数据转换成任意你想要的数据类型,能不用就不用

    1.基本用法:reinterpret_cast<type-id>expression

 

    2.使用场景:不到万不得已,不用使用这个转换符,高危操作

 

    3.使用特点:  

 

      a、reinterpret_cast是从底层对数据进行重新解释,依赖具体的平台,可移植性差

 

      b、reinterpret_cast可以将整型转换为指针,也可以把指针转换为数组

 

      c、reinterpret_cast可以在指针和引用里进行肆无忌惮的转换

 

 

    

 

以上是关于C++从新学习和知识梳理的主要内容,如果未能解决你的问题,请参考以下文章

Android学习—— Android 知识梳理

汇编第一章--基础知识梳理与总结

Python 学习知识点梳理

Linux基础增强与辅助知识梳理

iOS 知识点梳理

3月7日薛老师讲义 学习重点知识梳理