dir2/foo2.h
(优先位置, 详情如下)
5.2 C 系统文件
5.3 C++ 系统文件
5.4 其他库的 .h
文件
5.5 本项目内 .h
文件
二 作用域 1) 1. 禁止使用内联命名空间 2. 在c文件允许甚至鼓励使用匿名命名空间 3. 引用其他名字空间的类 namespace a { class A; } // a::A 的前置声明
4. 不要在命名空间std内声明任何东西 5. 最好不要使用using 从而使得所有命名空间的内容可以正常使用 6. 在cc文件中,函数,方法,类中可以使用using 2) class Foo {
private:
// Bar是嵌套在Foo中的成员类
class Bar {
…
};
};
嵌套类: 只给外部类使用,防止类名污染,在.h 从前置声明,在.cc中定义 3)某些情况下, 非成员函数和静态成员函数是非常有用的, 将非成员函数放在名字空间内可避免污染全局作用域. 将非成员函数和静态成员函数作为新类的成员或许更有意义, 当它们需要访问外部资源或具有重要的依赖关系时更是如此. 4)将变量尽可能置于最小作用域内,并在变量声明时进行初始化。 如果变量是一个对象,每次进入作用域都要调用构造函数,每次退出作用域都要调用析构函数 5)只允许原生数据类型(int double)的全局变量和静态变量 6) namespace的使用除了考虑命名污染,可读性之外,主要为了降低耦合,提高编译和执行效率
三 类 不要在构造函数中进行复杂的初始化 (尤其是那些有可能失败或者需要调用虚函数的初始化).
如果类中定义了成员变量, 则必须在类中为每个类提供初始化函数或定义一个构造函数. 若未声明构造函数, 则编译器会生成一个默认的构造函数, 这有可能导致某些成员未被初始化或被初始化为不恰当的值.
对单个参数的构造函数使用 C++ 关键字
explicit
.
2个例外 拷贝构造函数, 作为其他类的透明包装类
如果你的类型需要, 就让它们支持拷贝 / 移动. 否则, 就把隐式产生的拷贝和移动函数禁用.
在能够减少重复代码的情况下使用委派和继承构造函数.
仅当只有数据时使用 struct, 其它一概使用 class.
在类中使用特定的声明顺序:
public:
在 private:
之前, 成员函数在数据成员 (变量) 前;
将 所有 数据成员声明为 private
, 并根据需要提供相应的存取函数. 例如, 某个名为 foo_
的变量, 其取值函数是 foo()
. 还可能需要一个赋值函数 set_foo()
.
特例是, 静态常量数据成员 (一般写做 kFoo) 不需要是私有成员.
一般在头文件中把存取函数定义成内联函数.四 谷歌奇技动态分配出的对象最好有单一且固定的所有主(onwer), 且通过智能指针传递所有权(ownership).使用
cpplint.py
检查风格错误.