C++:一些“区别”的总结

1) 指针和引用的区别

                1、指针可以不初始化;引用必须在声明时进行初始化。
                2、指针可以为0,即为空指针;引用不能为空,因为声明时进行了初始化。
                3、指针可以改变指向的对象(地址);引用一经初始化不可以改变。
                4、对指针进行更改讲导致其指向另一个对象;对引用进行更改讲导致其指向的实例被赋值。
                5、sizeof指针得到的是指针本身的大小;sizeof引用得到的是所指向对象的大小。

(2) 堆和栈的区别

                1.栈内存存储的是局部变量而堆内存存储的是实体;
                2.栈内存的更新速度要快于堆内存,因为局部变量的生命周期很短;
                3.栈内存存放的变量生命周期一旦结束就会被释放,而堆内存存放的实体会被垃圾回收机制不定时的回收。
                4.栈是从高地址向低地址开辟的,申请的内存是连续的;堆是由低地址向高地址申请的,它是根据链表实现的,所以它的内存不连续
                5.堆是由程序员申请释放的;栈是系统开辟系统释放,申请的效率快
                6.在申请的大小限制上,栈一般在Windows下申请的空间大小为2M(也有的说1M),堆可申请的大小为2G

(3) new和delete是如何实现的,new 与 malloc的异同处(malloc/free  不能满足动态对象的要求(非内部数据类型的对象) ==>  new/delete)
                
                new的实现:operator new 开辟空间,调用构造函数初始化对象
                delete的实现:调用析构函数清除对象,operator delete释放空间
                
                new和malloc区别:new是一个关键字,而malloc是一个函数
                                 new是自由存储区,malloc在堆上
                                 new在开辟空间时可以初始化对象,malloc只能开辟空间
                                 new支持重载(new可以自己写,调用malloc),malloc是系统提供的函数,不可修改
                                 new可以调用malloc,malloc不能调用new(向前兼容)

(4) C和C++的区别
                
                1、引入了命名空间namespace
                2、增加了bool类型
                3、c++可以重载,引入了模板
                4、c语言是面向过程的,c++是面向对象的
                5、函数符号的生成规则不同,c语言函数符号只与函数名有关(_sum),c++函数符号与其函数名称、返回值类型,参数类型,参数个数均有关系(?sum@@YAHHH@Z)
                6、const在c中是常变量,在c++中是常量
                ...........

(6) Struct和class的区别

                1、struct默认为public,class默认为private;
                2、struct主要用于定义数据成员,而class可以成员函数、成员变量
                3、class可以用于定义模板参数,struct不可以
                4、class用于定义类,struct用于定义数据结构

(7) define 和const的区别(编译阶段、安全性、内存占用等)

                编译阶段:define是在预编译阶段展开,const是在运行阶段使用
                安全性: 由于const有数据类型,所以它会进行类型的安全性检查,而define只是在预编译阶段展开,不会进行类型检查,在替换的时候有可能出现错误
                内存占用:define不占用内存,只是简单的替换,const会占用内存,它有相对应的地址

(8) 在C++中const和static的用法(定义,用途)

                定义: const 推出的初始目的,正是为了取代预编译指令,消除它的缺点,同时继承它的优点。
                            static 是c++中很常用的修饰符,它被用来控制变量的存储方式和可见性
                用法: const修饰变量时,该变量不可修改,并且一定要初始化
                            const修饰指针时,int const * p:常量指针,指针指向的地址可以改变,但不能修改指针指向的内存块的内容不能修改
                                                          int * const p:指针常量,指针指向的地址不可以改变,但可以修改指向的内存块的内容
                            const修饰类成员函数时,说明这个成员函数只能被常对象调用
                       
                            static在修饰局部变量时,该变量的生命周期为整个应用程序;修饰全局变量时,该变量只作用于本文件中,对外不可见;修饰成员变量时,它就属于类,须得在类外初始化
                            static修饰在函数外的函数时,本函数只在本文件可见;修饰成员函数时,只能访问类的静态成员变量(因为没有this指针)

(9) const和static在类中使用的注意事项(定义、初始化和使用)

                定义:const可以在类中定义,但不能在定义处初始化;static只能在类中声明,它定义在类外
                初始化:const须得在构造函数的初始化列表中初始化;static在类外定义的时候初始化
                使用:const的目的是防止类的成员函数修改对象;static的使用目的是作为类作用域的全局函数

(10) C++中的const类成员函数(用法和意义)

                用法:在函数后面加const,该函数为常成员函数,不会修改任何成员变量的值
                意义:为了保证能被const常对象调用,创建对象时可以调用成员函数,成员函数可能修改对象的值,当类成员函数加const,就不会修改对象的数值
 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值