我应该到处使用std ::和boost ::前缀吗?

qua*_*dev 7 c++

在我的C++代码中,我不使用声明using namespace std;using namespace boost;.这使我的代码更长,意味着更多的输入.我正在考虑开始使用"使用"声明,但我记得有些人反对这一点.建议的做法是什么?标准和助力是如此常见,那应该没有太大的伤害?

Kir*_*sky 16

using namespace只在C++文件中使用,而不是在头文件中.此外,大多数时候都不需要使用孔名称空间.例如,您可以编写using boost::shared_ptrusing std::tr1::shared_ptr轻松地在shared_ptr实现之间切换.

样品:

#include <iostream>

using std::cout;

int main()
{
    cout << "test" << std::endl;
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

  • 这种方法的另一个优点是,通过在include之后立即放置using语句,它会记录该包含文件中正在使用的内容.在这种情况下,我们立即看到包含iostream以使用cout. (3认同)
  • 第三种选择是使用typedef,这可能有其他原因:typedef boost :: shared_ptr <foo*> foo_ptr_t; (2认同)

ypn*_*nos 15

Using namespace ... 不是为了娱乐而发明的.

如果你有充分的理由使用它,那么这样做(并且经常使用来自这些命名空间的东西是确切的理由).不要听狂热分子告诉你他们不想做的一切,因为不明原因本身就是邪恶的.

但是,在这些方面推理的一个很好的来源是C++ FAQ lite:http: //www.parashift.com/c++-faq-lite/coding-standards.html#faq-27.5

我已经阅读过了,仍然决定像你想的那样使用它.现在您可以做出明智的决定:-)

  • 对于更长的命名空间,您可以使用`namespace fs = boost :: filesystem`,然后通过键入`fs :: path`来引用`boost :: filesystem :: path`. (13认同)

小智 6

我自己的规则是:

  • 在头文件中,所有的名字都明确合格例如std::string,std::cout等在其使用点
  • 在源文件中,使用文件顶部常用名称的子句,例如.运用std::string;
  • 从不using namespace xxxx;在生产代码中使用.


xto*_*ofl 5

事实上,代码中充满 ::std:: 前缀,在阅读代码时确实很烦人。但是,您想尽可能轻松地知道符号位于哪个命名空间中......

这不是 IDE 的工作吗?

只要我的 IDE 不支持“查看短类型名称”,我就倾向于using声明常用符号(即 STL、boost 等)。可读性第一!

  • 英语:当 英语:你 英语:重复 英语:相同 英语:相同 英语:事物 英语:全部 英语:the 英语:时间 英语:it 英语:只是 英语:变成 英语:噪音。 (8认同)