const 限定一个对象为只读属性。
(1)const char p 限定变量p为只读。这样如p=2这样的赋值操作就是错误的。
(2)const char p p为一个指向char类型的指针,const只限定p指向的对象为只读。这样,p=&a或 p++等操作都是合法的,但如p=4这样的操作就错了,因为企图改写这个已经被限定为只读属性的对象。
(3)char const p 限定此指针为只读,这样p=&a或 p++等操作都是不合法的。而p=3这样的操作合法,因为并没有限定其最终对象为只读。
(4)const char const p 两者皆限定为只读,不能改写.
有了以上的对比,再来看二级指针问题:
(1)const char p p为一个指向指针的指针,const限定其最终对象为只读,显然这最终对象也是为char类型的变量。故像p=3这样的赋值是错误的,而像p=? p++这样的操作合法。
(2)const char const p 限定最终对象和 p指向的指针为只读。这样 p=?的操作也是错的。
(3)const char const * const p 全部限定为只读,都不可以改写。
CSomething a(); 只是个函数声明
CSomething b(2); +1
CSomething c[3]; +3,对象数组
CSomething &ra = b; 引用,没有新构造
CSomething d=b; +1,调用拷贝构造函数
CSomething pA = c; 只是给指针赋值
CSomething p = new CSomething(4); +1,构造并给指针赋值
总共6个
本题主要考虚函数的存储方式:
在32位系统下,虚函数指针占用4个字节,并且类成员变量的地址的首部
所以只会给a赋值所以 输出位 200 10
答案: pA和pC的地址相同
当有多继承时,成员是如何排列的?
因为先继承的类A,然后继承的B,所以将派生类地址转换成基类地址时,pA和pC地址相同
vector O(1)
deque O(1)
map 双向迭代器,由于时关联容器,需要通过key访问value,O(h)
unordered_map 前向迭代器,平均复杂度O(1), 最差O(n)
string O(1)