可能是重复问题:
你更喜欢在C++中使用显式命名空间还是'using'关键字?
我是一名C#开发者,但我的朋友是C++开发者。他向我展示了充斥着像 std::for_each
和 boost::bind
这样的调用的代码。我在C#中使用过,并认为使用指令可以提高代码的可读性和开发速度。例如,在C# foreach语句之前输入任何命名空间都会很麻烦。
使用这些流行的命名空间的优缺点是什么?
是否将这些命名空间包含进来是最佳实践呢?
可能是重复问题:
你更喜欢在C++中使用显式命名空间还是'using'关键字?
我是一名C#开发者,但我的朋友是C++开发者。他向我展示了充斥着像 std::for_each
和 boost::bind
这样的调用的代码。我在C#中使用过,并认为使用指令可以提高代码的可读性和开发速度。例如,在C# foreach语句之前输入任何命名空间都会很麻烦。
使用这些流行的命名空间的优缺点是什么?
是否将这些命名空间包含进来是最佳实践呢?
首先,让我们做两个区分:
1)有使用指令,如using namespace std;
和使用声明,如using std::cout;
2)您可以将使用指令和声明放在头文件(.h)或实现文件(.cpp)中
此外,使用指令和声明会将名称带入它们被写入的命名空间中。
namespace blah
{
using namespace std; // doesn't pollute the *global* namespace, only blah
}
namespace MyLocalName
{
using namespace boost;
class X
{
// can use things from boost:: here without qualification
};
}
using MyLocalName::X; // brings X back into the global namespace
但是不要将 using namespace boost;
或者相当的代码放在会将Boost中所有东西都拖入全局命名空间的地方,以免影响其他人。
我反对使用using namespace
语句,除非是在函数体内的局部使用。在每个标识符前写全限定命名空间并不麻烦,除非你每天要写500行以上的代码。
using
有一个非常好的理由,前提是您不会污染任何不应该污染的名称空间。 - Stuart Golodetzstd::vector
,但如果它是standard::containers::vector
,那么我就非常倾向于在各个地方放置using
指令。 - André Caron