effective C++ 第一章

技术effective C++ 第一章 effective C++ 第一章第一章 让自己习惯 C++(Accustoming Youself to C++)
条款1:视C++为一个语言联邦
C++是个多

第一章生效

第一章 让自己习惯 C++(Accustoming Youself to C++)

条款1:视C++为一个语言联邦

c是一种多重范型编程语言,支持过程形式、面向对象形式、函数形式、泛型形式和元编程形式。

c被视为一个语言联盟,包括以下四个部分:

列车员:面向过程's部分

面向对象C:面向对象,的部分,包括封装、继承、多态和虚函数(动态绑定)。

模板:泛型编程部分

STL:结合了泛型编程和OOP编程思想的C++标准模板库,包括容器、迭代器、算法和函数对象。

请记住:

C++高效编程守则视状况而变化,取决于使用的是这四个部分中的哪一部分。

条款2:尽量以const,enum,inline代替#define

是的,编译器代替预处理器.

#define,即宏定义在预处理阶段处理,不进入符号表。

int a=5,b=0;

CALL_MAX(a,b);//a累计两次。

CALL_MAX(a,b 10);//a累计一次。

这是一种不可预测的行为,因此使用内联函数代替宏定义函数。

请记住:

对于单纯常量,最好使用const对象或enum替换#defines。

对于形似函数的宏,最好改用inline函数替换#defines。

条款3:尽可能使用const

Const关键字告诉编译器一个值应该保持不变,也就是说,它是只读的。

const成员函数

如果两个成员函数的恒定性不同,它们就可能被重载。

常量成员函数表示的指针类型是常量类名。

使用常量成员函数来处理常量对象。

在const和non-cons成员函数中避免重复

使用非常量版本调用常量版本,并转换常量_cast和静态_cast,例如:

const char运算符[](int pos)const;//const版本

char operator[](int pos){//非常数版本

返回常量_castchar //返回值转换,删除常量

(static _ castconst CLaSS name(* this)[pos]);//*此转换,添加常量

}

但是,用const version来调用非常数版本是错误的。

请记住:

将某些东西声明为const可以帮助编译器侦测除错误;const可以被施加在任何作用域内的对象、函数参数、函数返回类型、成员函数本身。

编译器强制实施bitwise constness,但是你编写程序时应该使用“概念上的常量性”。

当const和non-const成员函数有着实质等价的实现时,使用non-const版本来调用const版本可以避免代码重复。

条款4:确定对象使用前已被初始化

始终在使用对象之前对其进行初始化。

对于内置类型,请手动初始化。

对于非内置类型,使用构造函数进行初始化。

赋值和初始化:有不同之处

//赋值而不是初始化。

ABEntry(常量字符串名称,常量字符串地址,int num){ 0

_ name=name

_ address=address

_ num=num

}

//初始化,在进入构造器本体之前发生。

//即成员初始化列表。

ABEntry:ABEntry(常量字符串名称,常量字符串地址,int num)

: _name(姓名)、_address(地址)、_num(号码){ }

c有一个固定的初始化顺序:按照声明顺序进行初始化,且基类先于派生类初始化.

静态对象:它的生命周期是从被构造到程序结束。

局部静态对象:函数中的静态对象。

非局部静态对象:非函数中的静态对象,其初始化顺序在不同的编译单元中是不确定的。

因此,要解决非局部静态对象的初始化顺序问题,需要将非局部静态对象转换为局部静态对象(使用singleton模式,即封装一层函数)。

Singleton类

{

公众号:

静态Singleton getInstance(){ 0

静态单例;

返回s;

}

私人:

Singleton() {}

Singleton(常量Singleton);

void运算符=(const Singleton);

};

请记住:

为内置类型进行手工初始化,C++不保证初始化它们。

构造函数最好使用成员初值列,不要在构造函数中使用赋值操作,初值列中的成员变量的顺序应该和声明顺序一致。

为免除“跨编译单元之初始化次序”问题,使用返回local static对象引用的函数来代替non-local static对象。

reference

[1]有效C斯科特迈耶斯

内容来源网络,如有侵权,联系删除,本文地址:https://www.230890.com/zhan/143785.html

(0)

相关推荐

  • 春笋怎么保存,什么方法保存竹笋时间最长

    技术春笋怎么保存,什么方法保存竹笋时间最长1. 要保存好竹笋,要先了解一点竹笋老化方面的知识春笋怎么保存。竹笋在强光和高温下新陈代谢很旺盛,竹笋会出现纤维老化。此外,竹笋被采挖出来后,由于没有根部供水了,加上断口失水和竹

    生活 2021年10月24日
  • 美容医院排行,中国排名前十的美容院有哪些

    技术美容医院排行,中国排名前十的美容院有哪些御尚坊颜连锁美容院、梵玛西美容品牌、北京御蜂坊·蜂SPA美容、兰黛之谜、娇悦诗、百莲凯、克丽缇娜、雅致轩、蔓菲国际、美莱。美容行业是最有前景的八大行业之一美容医院排行,目前国内

    生活 2021年10月31日
  • 抖音刷点赞刷粉,抖音3元1000粉自助下单网址?

    技术抖音刷点赞刷粉,抖音3元1000粉自助下单网址?抖音刷赞的妙用,抖音刷赞有那些用处,随着抖音的火爆,现在入住抖音的用户那是相当多呀,入住抖音的用户多了,当然抖音内部的竞争也就大了,有部分抖音新人没有人气,没有名气,响

    测评 2021年10月19日
  • IE8兼容性问题的快速解决方法是什么

    技术IE8兼容性问题的快速解决方法是什么IE8兼容性问题的快速解决方法是什么,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。为了实现IE8兼容基于其它网页标准

    攻略 2021年11月25日
  • css 旋转(css3动画旋转属性)

    技术css3属性控制旋转的代码有哪些这篇文章给大家分享的是有关css3属性控制旋转的代码有哪些的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。 css3属性控制旋转的

    攻略 2021年12月15日
  • 如何在word,如何在Word文档中画线

    技术如何在word,如何在Word文档中画线方法一:插入直线形状如何在word。1、首先打开Word文档,选择插入-形状,然后选择线条中的直线,也可以选择其它各种线型。2、在Word中点击一点,按住鼠标向右托就可以画出直

    生活 2021年10月20日