标签:text local 应该 策略 nbsp 构建 define position efault
组织策略
0,不拘于小结
缩进, 行的长度,命名,注释,空格,制表,
1-4,高警告级别干净利落地进行编译,使用构建系统,使用版本控制,代码审查
风格
5,一个实体应该只有一个紧凑的职责。 (依赖性管理,继承,抽象,隐藏)
6,正确简单清晰
7,
===================
01, 视c++为一个语言联邦
multiparadigm programming langauge, 支持过程(procedrual),面向对象object oriented, 函数形式functional
,泛型形式generic, 元编程metaprogramming
02, 尽量用const 取代enumu,inline替换#define
03, 尽量用const
const成员函数目的,为了该成员函数作用于const对象身上
两个函数如果常量性不同,可以被重载
const对象大多数用于passed by poiner-to-const, passed by reference-to-const
bit constness,成员函数只有在不更改任何non-static成员对象才可以说是const,也就是说不更改对象内任何一个bit.
logical constness,一个const成员函数可以修改它所处理的对象内的某些bits,但只有客户端侦测不出的情况下才得如此。
mutable 能够释放掉non-static 成员变量的bitwise constness约束。
const char & operator[](std::size_t position) const
{
return text[position];
}
char & operator[](std::size_t position)
{
return const_cast<char&>(static_cast<const TextBlock&>)(this)[position]);
}
第一次转型static_cast<const TextBlock&>)(this)
第二次转换const_cast<char&>
利用const实现non const版本
反向做法不可以。const成员函数承诺不改变其对象的逻辑状态(logical state),non-const成员函数没有这样的承诺。
如果const调用non-const,就冒这样的风险:你曾经承诺不改动的那个对象被改动了。
编译器强制实施bitwise constness, 编程应该使用概念上的常量性(conceptual constness)
04, 确定对象使用前没初始化
变量初始化规则,取决于变量类型和位置
1)内置类型变量初始化取决于变量定义的位置,函数体外定义的变量都初始化成0,函数体里定义的内置类型不进行自动
初始化。
2)类类型变量的初始化,通过构造函数初始化(有默认/无默认需要显示调用)
non-local-static 对象初始化顺序无法确定
对应内置对象手工初始化
使用成员初始值列表,不要在构造函数里面赋值,免除“跨编译单元之初始化次序”问题,用local static 对象替换
non-local static对象
05,了解c++默认编写哪些函数
default构造函数,拷贝构造函数,拷贝赋值
06,若不使用编译器自动生成的函数,就该明确拒绝。
uncopable 将构造函数声明为private
07,为多态声明virtual 析构函数
08,别让异常逃离析构函数
09,
标签:text local 应该 策略 nbsp 构建 define position efault
原文地址:http://www.cnblogs.com/zhoug2020/p/6055074.html