C++ Coding Standards:名字空间和模块

原创 2005年05月24日 14:39:00

By Herb Sutter, Andrei Alexandrescu

树人译

名字空间和模块

57.      把类型和其非成员函数接口放在同一个名字空间中。

非成员函数也是函数:为了能被正确地调用,被用作一个类类型X的接口的一部分的非成员函数(特别是操作符和助手函数)必须定义在X所在的名字空间中。

58.      把类型和函数放到单独的名字空间中,除非你明确地想把它们放到一起工作。

这样有助于防止名称查找意外:通过把它们放在各自的名字空间中(连同与它们直接相关的非成员函数;参见:Item57),把类型从出于无心的“实参依赖查找”(ADL,通常所说的Koenig查找)中脱离出来,并且鼓励有意的ADL。避免把一个类型和模板化的函数或操作符放在同一名字空间中。

59.      不要在头文件或#include指令前放置名字空间using指令。

名字空间using指令是为了你的方便,而不是让你与其它人相冲突:绝不要在#include指令前写using声明或指令。

推论:不要在头文件中写名字空间级的using声明或指令;作为替换,应该显式地用名字空间来限定所有名称。(第二条规则是从第一条得出的,因为头文件绝不可能知道其后有什么其他头文件的#include指令出现)

60.      避免在不同模块中分配和释放内存。

把事情后推到你发现它们的地方:在一个模块中分配内存,而在另一个不同的模块中释放内存,这样做会因为在那些模块间建立了一个微妙的长距离相关性而使你的程序变得很脆弱。它们必须使用同一个编译器版本,同样的选项flag(特别是debugNDEBUG)和同样的标准库实现来编译,而且在实践中,在释放操作发生时分配内存的模块最好仍在加载中。

61.      不要在头文件定义具有链接的实体。

重复会导致膨胀:包括名字空间级的变量或函数在内的具有链接的实体会被分配内存。在头文件中定义如此的实体会引起连接错误或内存浪费。把所有具有链接的实体都放到实现文件中去。

62.      不要让异常跨模块边界传播。

不要把石头扔到邻居家的花园里去:现在还没有被广泛认可的关于C++异常处理的标准。不要让异常在代码的两个地方传播,除非你控制着用于构建的编译器及其选项;否则,模块可能不会支持关于异常传播的兼容性实现。典型地,归结为:不要纵容异常跨模块/子系统边界传播。

63.      在模块接口中充分使用可移植的类型。

涉及到(模块的)边界时要格外小心:不要让一个类型出现在模块的外部接口中,除非你能保证所有用户都能正确地理解这个类型。使用用户能够理解的最高级别的抽象。

C++ Coding Standards:名字空间和模块

By Herb Sutter, Andrei Alexandrescu 著   树人译 名字空间和模块   57.      把类型和其非成员函数接口放在同一个名字空...
  • lifewalk
  • lifewalk
  • 2007年11月21日 23:27
  • 254

转:C++ Coding Standards

/*************************************************************************Scripts of C++ Coding Stan...
  • bat603
  • bat603
  • 2006年12月19日 16:42
  • 2591

C++初级主题--名字空间域和类域

一.序在C++中支持三种域:局部域、名字空间域和类域。二.名字空间域1.名字空间域是随标准C++而引入的。它相当于一个更加灵活的文件域(全局域),可以用花括号把文件的一部分括起来,并以关键字names...
  • derkampf
  • derkampf
  • 2017年02月05日 18:10
  • 878

c++基础知识---名字空间

namespace 是C++中的一个新的特性,它的出现只要是为了避免出现名字污染。JAVA语言中的packing包和C++的namespace功能差不多************************...
  • tjhgltt
  • tjhgltt
  • 2008年05月02日 22:25
  • 4719

C++名字空间详解

名字空间的由来名字空间(namespace)是由标准C++引入的,是一种新的作用域级别。原来C++标识符的作用域分为三级:代码块({…}和函数体)、类域和全局作用域。如今,在类作用域和全局作用域之间,...
  • K346K346
  • K346K346
  • 2015年08月29日 18:45
  • 5655

史上最全代码风格大全!!!Coding Style Conventions and Standards

Coding Style Conventions and Standards A curated list of Coding Style Conventions and Standards. ...
  • xkzju2010
  • xkzju2010
  • 2015年08月31日 16:46
  • 1493

重载与命名空间(学习笔记)

重载与命名空间(学习笔记)
  • u012333003
  • u012333003
  • 2014年07月01日 19:42
  • 778

C++ Coding Standards and Practices

Coding practices should be in place to maintain a consistancy among software projects to enforce a d...
  • hf_yang97
  • hf_yang97
  • 2010年03月08日 17:44
  • 104

《C++ Coding Standards》读书笔记

1.二元操作符    一般而言,对于二元操作符@(如+、-、*、=等),应该定义有两种形式:operator @和operator @=,对应于两种形式的表达式:a @ b 和 a @= b。通常,都...
  • virtualdesk
  • virtualdesk
  • 2010年04月09日 20:41
  • 1083

C++ Coding Standards:序言

By Herb Sutter, Andrei Alexandrescu 著树人译序言及早地墨守成规:用相同的方法处理相同的过程。积累惯用法。标准化。你和莎士比亚之间的唯一差别就是习语表的长度,而不是词...
  • arha
  • arha
  • 2005年05月16日 14:58
  • 821
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:C++ Coding Standards:名字空间和模块
举报原因:
原因补充:

(最多只允许输入30个字)