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可以在指针和引用里进行肆无忌惮的转换

    

原文地址:https://www.cnblogs.com/cpulspulsstudy/p/11180949.html

时间: 2024-11-08 23:08:06

C++从新学习和知识梳理的相关文章

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

第一章 信息化的基础知识 国家信息化体系要素:国家信息化体系包括信息技术应用.信息资源.信息网络.信息技术产业.信息化人才.信息化法规政策和规范六个要素. 电子政务:电子政务建设的指导原则(1)统一规划,加强领导.(2)需求主导,突出重点,抓好建设统一网络平台,建立标准.健全法制,建设和整合关系国民经济和社会发展全局的业务系统.(3)整合资源,拉动产业.(4)统一标准,保障安全. 电子政务的主要任务:(1)建设和整合统一的电子政务网络,为适应业务发展和安全保密的要求,电子政务网络由政务内网和政务

Js基础知识梳理系列

小序:总是感觉自己的技术一直在原地踏步,想学习一些新的技术,但学起来很吃力,而且总是没有什么实际的收获,似乎进入了所谓的“瓶颈期”.问了一些前辈是否也遇到过同样的问题,他们给我的解决方案是,基础不稳固,再把基础巩固一下.然后学起新的技术会轻松一点点.也是,反思自己曾经走马观花式的学习,确实有很多细腻的技术点没有接触到,所以,我还没有做到大神眼里的“精”.抱着这样的目的,再次翻开<JavaScript高级编程设计>,我将按照着书上的内容和顺序,系统化的学习这本书中的知识.并且在学习的过程中会结合

指针知识梳理1-变量基本定义及使用

一.指针变量.地址.数据.内存关系 在学习指针之前,我们先统一几个概念. (1)在计算机中本质 用 内存 来存储 数据 ,在我们写代码的时候,用变量来存储数据 . (2)变量是在编程语言中的概念,方便我们编程,当编译运行起来以后,就只有内存了和数据了. 比如 当 我们写代码 int a; int b; a = 1; b = a; 第1行第2行,语法层面是 定义两个变量,计算机层面是在内存中申请 2个4字节内存,a地址 0x10,b地址  0x0c 第3行,语法层面是 给变量a赋值1,计算机层面是

Python基础知识梳理 - 第01部分

在开始Python基础知识梳理前, 先安装下环境. 以下过程是在Linux操作系统, root用户下进行的, 主要安装了2.7版本的python, 和pip, ipython, virtualenv等工具, 最后是vim的设置. 1. 安装python. # wget https://www.python.org/ftp/python/2.7.14/Python-2.7.14.tgz Python-2.7.14 # ./configure --prefix=/usr/local/python27

【PHP 面试知识梳理】

PHP 面试知识梳理 算法与数据结构 BTree和B+tree BTree B树是为了磁盘或者其他存储设备而设计的一种多叉平衡查找树,相对于二叉树,B树的每个内节点有多个分支,即多叉. 参考文章:https://www.jianshu.com/p/da59af78ec59 B+Tree B+树是B树的变体,也是一种多路搜索树. 参考文章:https://www.jianshu.com/p/da59af78ec59 排序算法 快速排序 快速排序是十分常用的高效率的算法,其思想是:先选一个标尺,用它

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

Linux基础增强与辅助知识梳理... ------------ Linux学习基础需要学习那些知识 学习Linux对于程序开发的好处 怎样开始学习Linux Linux的学习方法参考 Linux系统的由来 Linux为什么需要学习:有自己清晰的认识和坚持 开源可以修改源代码:使开源工具或是系统更加符合自己的需要,删除一下不需要的功能想做什么和能做什么Linux运行稳定,对网络有良好的支持,成本低,可以根据需要进行软件或是系统的修改裁剪,可以进行私人定制Linux:林妮科思,利尼克斯Linux系

Linux相关网络知识梳理

一,前言 一个运维有时也要和网络打交道,所以具备最基本的网络知识,对一个运维人员来说是必要的.但,对于我们的工作来说这些并不是重点,因此,我不可能从最基础的网络知识开始讲起.本节内容更多是从一个梳理和总结的角度进行阐述.如若同学们遇到不懂,或不明白的地方,那么你要留心了,你有很多基础性的网络知识还不具备,我建议从网上有针对性的学习一下. 二,网络基础学习体系 思科课程体系的大致浏览(CCNA),虽然知识不多,培训周期一般在1周左右,但涵盖了大部分的知识内容,对于初步理解网络知识,掌握网络的相关配

深入浅出安卓学习相关知识,如何从零学好移动开发

原文发表自我的个人主页,欢迎大家访问 http://purplesword.info/mobile-develop 由于近几年来互联网的飞速发展,安卓和iOS平台的大量普及推广,移动开发在当前是非常热门的一个方向. 有不少同学问我如何学习安卓,要学些什么,难不难学.之前一直没有想好应该怎么回答这个问题,只是简单的说安卓自身门槛不高,并不难学.因为我觉得准确回答一个类似这样的问题往往需要灵感.现在根据我的学习体验,做个大概的总结. 1.我为什么学安卓 我从刚开始接触安卓开发到现在也有两三年的时间了

指针知识梳理7- 函数指针

一.函数的地址 前面讲 程序运行起来以后,在内存中有代码区,程序运行每一条指令,是从内存中读出来这条指令,然后再运行. 所谓函数的地址是指函数的入口地址,这个函数的从这个地址開始进入运行,也就是从这个地址处取指令运行. 那么在代码层面,函数的地址用 函数指针变量 来存储. 二.基本使用 1.函数指针定义 函数指针的定义,在语法看起来略微有点怪,仅仅须要记住形式 返回值 (*指针变量名)(形參类型): 比方,下面4个函数 void func1(void) { } int func2(void) {