c++八股文

本文探讨了声明与定义的差异,指针和引用的实质,sizeof的运行时与编译时特性,程序运行中不同内存区域,new、delete与malloc/free的区别,以及explicit关键字的作用。讲解涵盖了C++内存管理和基本概念的关键点。
摘要由CSDN通过智能技术生成

1、声明和定义的区别

答:声明(declare)未必会申请内存空间,定义会申请内存空间;对于普通的常规类型,比如int a,声明即定义,但A a 和A a = new A()有明显区别;

2、指针和引用的区别

答:指针是真的开辟内存空间存储地址,引用是原变量的别名。

3、sizeof是在编译时取值还是在运行时取值?

对于支持查看动态数组的c99及以后,是运行时取值;其他为编译时取值。

4、程序运行内存分配

代码区:二进制代码,不可更改

常量区:const修饰的字符。

静态区:静态变量和全局变量。

堆区:程序员分配的内存空间。

栈区:函数调用

PS.栈的地址是连续的,对于堆:1次地址一定连续,几次申请的地址未必连续。

5、new、delete和malloc free的区别

new delete是关键字,malloc free 是库函数;new可以自动按合适大小分配内存,malloc需要sizeof;对于非pod类型的数据,用new,因为new会自动改allocater

上面错在用malloc,malloc没有改stl里的allocater。

6、explicit关键字:规定某函数不能用于隐式转换和复制初始化。

例如:原构造函数

class Point{
    public:
        int x, y;
        Point(int a = 0,int b = 0):x(a),y(b){};
};
void showPoint(Point _A)
{
    cout<<"("<<_A.x<<","<<_A.y<<")"<<endl;
}

目前程序调用showPoint(1),调用构造函数会隐式转换,默认构造一个Point为(1,0)的对象。

如果加上explic,将不允许showPoint通过复制构造函数构建一个Point为(1,0)的对象

class Point{
    public:
        int x, y;
        explicit    Point(int a = 0,int b = 0):x(a),y(b){};
};
void showPoint(Point _A)
{
    cout<<"("<<_A.x<<","<<_A.y<<")"<<endl;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值