google C++ 编程规范

本文详细介绍了Google C++编程规范,包括命名空间的使用,匿名和定名命名空间的优缺点,以及在.cc和.h文件中的应用。此外,还讨论了内嵌类、非成员函数、静态成员函数和全局函数的最佳实践,以及局部变量、静态变量和全局变量的声明和初始化注意事项。遵循这些规范有助于提高代码的可读性和可维护性。
摘要由CSDN通过智能技术生成

1       作用域

1.1     命名空间(namespace)

在.cc中提倡使用匿名命名空间(unnamed namespace[i])。而定名命名空间(named namespace)的命名应该以项目及(如果不在根目录的话)项目中的路径来命名。不要使用using关键字。

定义:命名空间将作用域分割为相互独立的,具有特定名称的作用域。这样就可以避免在全局作用域中容易产生的同名冲突。

优点:在类提供的(有层次的)名称隔离方法基础上提供了另一套(有层次的)命名隔离方法[ii]。

例如,两个不同的工程中都含有全局类Foo,这两个类名可能在编译时或者运行时产生同名冲突。但是,如果在每个工程中都将他们放进相应的命名空间中,project1::Foo和project2::Foo就是两个完全不同的类名,而不会再产生同名冲突了。

劣势:命名空间容易让人感到迷惑,因为类本身已经提供了一套(有层次的)名称隔离方法,而命名空间在这个基础上又添加了一套(有层次的)名称隔离方法。

在头文件中使用匿名命名空间,很容易违反C++的单一定义规则(One Definition Rule[iii])。

结论:根据下述原则使用命名空间。

匿名命名空间

在.cc文件中,不仅允许使用匿名命名空间,并且,为了避免运行时同名冲突,还提倡使用匿名命名空间:

·         namespace {                           // This is in a .cc file.

·         

·         // The content of a namespace is not indented

·         enum { kUnused, kEOF, kError };       // Commonly used tokens.

·         bool AtEof() { return pos_ == kEOF; }  // Uses our namespace's EOF.

·         

}  // namespace

但是,文件内的与某个特定类相关的实体,应当在该类内声明为类型、静态成员或静态成员函数,而不是在类外声明为匿名命名空间的一个成员。如上例所示,在匿名空间的结尾处要添加注释“// namespace”。

在.h文件中不要使用匿名命名空间。

定名命名空间

定名命名空间用法如下:

除文件最前端的包含语句、gflags[iv]定义(声明)以及前置声明的别的命名空间中的类之外,命名空间包含整个源代码文件的内容:

·         // In the .h file

·         namespace mynamespace {

·         

·         // All declarations are within the namespace scope.

·         // Notice the lack of indentation.

·         class MyClass {

·          public:

·           ...

·           void Foo();

·         };

·         

}  // namespace mynamespace

// In the .cc file

na

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值