我应该将所有c ++代码包装在自己的命名空间中吗?

Abt*_*deh 26 c# c++ namespaces

我来自ac #background,其中所有内容都有自己的命名空间,但这种做法在c ++世界中似乎并不常见.我应该将代码包装在自己的命名空间,未命名的命名空间或没有命名空间吗?

Joh*_*itb 35

遗憾的是,许多C++开发人员不使用命名空间.当我开始使用C++时,我很长时间没有使用它们,直到我得出结论我可以使用命名空间做得更好.

许多库通过在名称前添加前缀来解决名称空间.例如,wxWidgets将字符"wx"放在所有内容之前.Qt把"Q"放在一切之前.这并没有什么不妥,但是它要求你重新输入那个前缀,即使它可以从上下文中推断出你所说的声明.命名空间具有分层次序.在词法上更接近引用它们的点的名称可以在之前找到.因此,如果您在GUI框架中引用"Window",它将找到"my :: gui :: Window",而不是":: Window".

命名空间启用了一些不带它们就无法使用的好功能.例如,如果将类放入命名空间,则可以在该命名空间中定义自由函数.然后调用函数,而不是通过导入所有名称将命名空间放在前面,或者有选择地只将其中一些命名空间放入当前范围("using declaration").

如今,我不再使用任何项目.它们使得不再重复键入相同的前缀变得如此容易,但仍然具有良好的组织和避免全局命名空间的名称污染.

  • 是的,它使代码更清晰.一个全局变量告诉你什么,但config :: max_threads至少可以为你提供一个关于它来自何处的线索. (5认同)

Rob*_*uld 11

取决于,如果您的代码是库代码,请将其包装在命名空间中,这是C++中的实践.如果你的代码只是一个非常简单的应用程序,它不与任何其他东西交互,比如一个hello world类的应用程序,就不需要命名空间,因为它是多余的.

由于不需要名称空间,因此代码片段和Web上的示例很少使用它们,但大多数实际项目都使用它们.


Abt*_*deh 5

我刚刚发现了谷歌的 c++ 风格指南,他们有命名空间指南。

整个指南值得一读,但总而言之,他们说:

  • 将未命名的命名空间添加到 .cc 文件,而不是 .h 文件。
  • 将整个(在包含/声明之后) .cc 和 .h 文件包装在命名空间中。
  • 命名空间不会增加缩进级别。
  • 在命名空间 write 的右大括号处} // namespace
  • 不要在 中声明任何东西std,因为它是未定义的。
  • using禁止使用该指令。
  • using声明被允许在功能,方法和类。
  • 任何地方都允许使用命名空间别名。