Google C++ Style Guide 阅读笔记 3

命名空间

  • 在.cc文件中推荐使用无命名的命名空间,但不要在头文件中使用。例如,
    namespace{
    ……
    }
    命名空间应包裹include, 全局定义、声明和其他命名空间的前置声明之后的一切代码:
    // in the .h file
    namespace mynamespace{
    // All declarations are within the namespace scope
    Class MyClass{
    public:

    void Foo();
    }
    }
    }
    // in the .cc file
    namespace mynamespace{
    void MyClass::Foo(){

    }
    }
  • 不要在std命名空间里声明任何东西,也不要前置声明std空间里的类。要声明std中的实体,请包含对应的头文件。
  • 禁止使用using namespace Foo;将这个命名空间中的名字包含进来,这将污染命名空间。但在.cc文件中的函数、方法或者头文件的Class中使用using ::foo::bar是可以的。
  • 命名空间的别名: namespace fbz = ::foo::bar::baz;

成员类

  • 好处:只能在当前类中使用,不会污染命名空间
  • 坏处:前置声明的时候将包含整个当前类的声明
  • 不要把成员类设置成public,除非是作为接口的一部分

非成员,静态成员和全局函数

  • 推荐使用命名空间中的非成员函数或者静态成员函数而不是全局函数。

局部变量

  • 尽可能在最小的域中使用局部变量,并且在声明的时候初始化。
  • C++支持在函数的任何位置声明局部变量,但建议越局部越好,越靠近第一次使用越好。
  • 对于for(int i = 0; i < 10; i++)这样的方式,if和while也可以用。

静态和全局变量

  • 静态或全局的Class类型变量是不被允许的,这将导致构造和销毁的模糊不清。
  • 静态存储的对象,包括全局变量,静态变量,静态成员变量和函数静态变量必须是Plain Old Data(POD):ints, chars,floats,pointers 或者它们组成的数组或结构体。
  • 静态变量在类构造和初始化中的顺序是不确定的,所以不要用一个函数的返回值对静态POD初始化。
  • 因为上述原因,在静态变量中应用C 数组替代vector,用const char [] 替代string.
  • 如果一定需要一个Class类型的全局变量,用指针,但不要用智能指针,在main()或者pthread_once()初始化。

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。