关于C++的疑问

声明如果你看到这个列表,能够解决列表中未解决的问题,请不吝赐教。如果你有其他关于C++的疑问,请留言,我会加到列表中来,大家一起学习,一起解决。

注:绿色字体标注的是我自认为找到答案的问题,其他为未解决的问题。

问题列表:

1.所谓的列表初始化效率更高,这是为什么?

2.在使用string和vector类型时,已经将头文件<string>,<vector>包含进来了,但是定义变量时还是需要声明命名空间,或是以std::string, std::vector<T>的方式定义变量,why?

答:因为string,vector都定义在std这个命名空间下。

3.C++11中的vector和STL中的vector的关系是啥?有啥渊源?还是就是不同人的对vector的不同实现?

答:SGI STL被选为GNU C++的标准程序库,也就是说C++编程中#include<vector>其实使用的就是STL的vector,因为他就是C++的标准程序库。

4.C++的析构函数为什么要声明为虚函数?

答案参见C++析构函数为什么要为虚函数

5.在问题4的基础上更进一步,C++中基类的析构函数可否直接声明为纯虚函数?和在基类中将析构函数声明为虚函数的区别是什么?(假定基类中已经定义了一个纯虚函数,基类已经是一个虚基类和析构函数是不是纯虚函数没啥关系)

6.C++中构造函数可以声明为private吗?析构函数可以声明为private吗?

答:构造函数可以声明为private,这样就只能在类A内定义类A的对象。单例模式(singleton)中就利用了这个特点,防止单例在别的位置定义。(注:关于singleton的文章还没写,写了之后链接放在此处)

关于析构函数能否被声明为private?读过问题4中《C++析构函数为什么要为虚函数》之后应该就有答案了。因为析构的过程是派生类的析构函数调用基类的析构函数,所以析构函数不能被声明为private。

7.C++中定义一个空的classA,然后sizeof(a)结果是什么?//A a; a为class A实例化的一个对象。

答:答案为1。

8.基于问题7,为什么sizeof(a)的值为1?

答:因为编译器给这个空的class插入了一个char,那为什么要这么做?因为当以一个空的类定义一个对象后需要在内存中中开辟一个空间,如果class的size是0,那么这个class的地址应该是什么呢?编译器安插进这个char的目的就是为了class的object得以在内存中配置到一个独一无二的地址。

9.究竟什么样形式的构造函数称之为默认构造函数?

class Point{

public:

1--- Point(float x=0.0, float y=0.0, float z=0.0):_x(x),_y(y),_z(z){    ; }

2--- Point(){   ; }

};

之前一直以为形如2的称为默认构造函数,后来看《深入理解C++对象模型》称1也为默认构造函数;困惑了!。

10.

11.



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值