more effective c++基础议题

来源:互联网 发布:linux命令面试题及答案 编辑:程序博客网 时间:2024/05/22 15:45

条款一:区别引用和指针


1.不能引用空(比指针效率高,不必测试空)
2.引用总是指向最初获取的那个对象(不变性)
3.某些操作符按其语法需求,无法由指针完成,就应选择引用。(某些语法需求)
比如重载 operator[ ] 
vector<int> v(10);
v[5] = 10; // 返回值是引用
如果返回值是指针,则 *v[5] = 10; // 不符合正常操作

其他情况,用指针吧

----------------------------------------------------------------------------------------------

条款二:最好使用C++转型操作符


static_cast / const_cast / dynamic_cast / reinterpret_cast
1.一般转化 用static_cast
2.去常限制 用const_cast
3.(逻辑)继承体系转化  dynamic_cast / static_cast
优先使用dynamic_cast (父-->子)
原因:1.安全(不成功返回空)
            2.类型必须要有虚函数
dynamic_cast”:“Base”不是多态类型
4.(物理)二进制级转化 用reinterpret_cast
reinterpret_cast是为了映射到一个完全不同类型的意思,这个关键词在我们需要把类

型映射回原有类型时用到它。我们映射到的类型仅仅是为了故弄玄虚和其他目的,

这是所有映射中最危险的。(这句话是C++编程思想中的原话)
    char *pc = "hello";
    int *pn = reinterpret_cast<int*>(pc);

C的转型,在类中也是逻辑的,但是不是动态的,如 C 继承 A,B, 把A转化成B,C的转型就不如dynamic_cast灵活和动态。static_cast会编译出错
尽量少使用转型!

举例(逻辑与物理)

----------------------------------------------------------------------------------------------




----------------------------------------------------------------------------------------------

条款三:不要以多态方式使用数组


Base array[10]      
Derived array2[10]
void printArray(const Base *array, int n) {
for (int i = 0; i < n; i++)
cout << array[i] << endl;
}
或者通过Base指针删除Derived objects组成的数组
Base *pB = new Derived[10];
void deleteArray(Base *array) { delete [ ] array; }  

多态和指针算数不能混用!
具体类不要继承另一个具体类。


----------------------------------------------------------------------------------------------

条款四:非必要不提供默认构造函数


缺乏默认构造函数会带来一些束缚:
1. Base  array[10].将不能成功
2.对于许多基于模板的容器,要求目标类型必须有默认构造函数


那我需要刻意提供一个吗?如 Base(int num = UNSPECIFIED)
没必要,反而增加判断,影响程序效率。


可以存指针,再开辟空间。(为了节省空间开销,可以使用定位new,但是要注意删除的格式。
大部分情况下,如果谨慎设计template,可以消除对default constructor的需求,如vector.





0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 被地雷蜂蛰了怎么办 被葫芦蜂蛰了怎么办 嘴巴被蜜蜂蛰了怎么办 被蜜蜂蜇伤了怎么办 婴儿被蜜蜂蜇了怎么办 婴儿被黄蜂蛰了怎么办 蜜蜂在石头缝里怎么办 中蜂蜂王不产卵怎么办 冲电器充电变慢怎么办 摇号审核通过后怎么办 京东白条开不了怎么办 得了病心里压力大怎么办 电视家看直播卡怎么办 日上提货单丢了怎么办 想直飞香港l签怎么办 u盘识别不出来怎么办 卫生间下水道有小飞虫怎么办 橙光一直闪退怎么办 若白回来了,长安怎么办 没了你以后我该怎么办 玩cf的时候闪退怎么办 婴儿嗓子哭哑了怎么办 宝宝嗓子哭哑了怎么办 小孩嗓子哭哑了怎么办 孩子嗓子哭哑了怎么办 月经来了晚上漏怎么办 在学校月经漏了怎么办 月经来了血下不来怎么办 想让月经快点来怎么办 孩子来月经不规律怎么办 一个月来2次月经怎么办 14岁月经不规律怎么办 不是经期内裤有黑色血怎么办 月经量多血块多怎么办 网友见面没上她怎么办 拔完智齿老流血怎么办 学车教练不教怎么办 想开奶茶店没有经验怎么办 宝宝吃多了不消化怎么办 吃了糖精和鸡蛋怎么办 小米平板2太卡了怎么办