- 关键字 explicit
用于告知编译器,该构造函数可以用于完成隐式类型转换(implicit type conversation)!
建议:除非有一个很好的理由,否则将构造函数申明为 explicit!
- C++是一个由多个次语言组成的语言联邦
c 风格
面向对象的c
泛型C++
STL-C++
不同的次语言尤其各自的编程守则,以传递参数为例,若编写c风格的c++, 传值比传递引用更高效,而在面向对象的c与泛型编程中 const reference更安全可靠,到了STL_C++又回归传值更高,这与次语言本身的程序设计范式与实现方式有关。
- 尽量用enum,inline和const来代替define(用编译器代替预处理)
//the enum hack:
class myClass{
privat:
enum {Turns = 6};
int array[Turns];
};
- 尽量使用const,只要不违反设计需求
对于const成员函数,const表明该函数可以“操作const对象”!!!而c++中,const常量性不同的两个函数可以完成重载!!!
const char print( const myString cstr) const
{
return cstr[0];
}
- mutable 解除const的限制
// 对于类成员函数,避免const版本与非const版本重复的技巧:
// 让非const成员函数在内部调用cosnt函数
class TextBlock
{
public:
// --- constructor
// -- deconstructor
const char& operator[](std::size_t pos) const // const version
{
// -- operation is omitted
}
char& operator[](std::size_t pos ) // non-const version
{
return // call const function & return the result
const_cast<char&>(
static_cast<const TextBlock&>(*this)[position]
);
// please pay attention to the type conversion!!!
}
};
- 确定对象被使用前已经被初始化
-对于无成员的内置类型,在声明时手工完成初始化
-对自定义类类型,使用初始化列表(member initialization lists)进行初始化!确保构造函数对每一个成员变量进行初始化(即使是无参的default构造函数,也可以使用无物的初始化列表) -> 解决引用类型、const类型的初始化问题!!!
-利用单例模式(singleton pattern)的设计方法,解决non-local static实例的初始化问题
myClass::myClass
:theName(),theAdreee(),theNum()
{};
- 6.
2016.10.21 待续