google代码风格
1.使用安全的分配器(allocator),如scoped_ptr,scoped_array
2.测试用的,其他的不能用:
2.1 友元
2.2 C++异常
2.3 RTTI
3.类型转换,不要用(int)
3.1 static_cast:较大的算术类型赋值给较小的类型时,知道且不在乎精度损失
double slope=static_cast<double> (j)/i;
3.2 const_cast:常用于有函数重载的上下文
const char *cp; char *p=static_cast<char*>(cp);//正确,但不能通过p写值 static_cast<string>(cp);//正确,字符串转string const_cast<string>(cp);//❌,const_cast只能改变常量属性
3.3 reinterpret_cast:为运算对象的位模式提供较低层次的重新解释,危险,避免使用
int *ip; char *pc=reinterpret_cast<char*>(ip);//pc指向的是一个int,而不是字符 string str(pc);//错误
3.4 dynamic_cast,RRTI运行时类型识别
4.流用于日志,其他不要用(因为很容易用错类型)
5. 使用assertion声明变量,而非unsigned
6. 用于STL中,对于仿函数(functors)和特性(traits)可以不用class而用struct。其他一律用class
7.类
7.1 类成员有虚函数,析构函数为虚。(?)
7.2 重载操作符&的类不能被前置声明
7.3 尽量不要重载,而是用equals(),copyFrom()等替代
7.4 仿函数类
8. *p++=*(p++)
9.for 循环
vector<int> v={0,1,2,3,4,5,6,7,8,9}; for (auto &r:v)//引用才能写操作 r*=2;
问题:
1.仿函数(functors)和特性(traits)