在C ++ Primer中,有一个提示说:
using
指令有用的地方在于实现 命名空间本身的文件。
我想这只是用于使用简写名称?我不确定它与仅用
实现的实现有什么不同namespace namespace_name
{
}
感谢。
答案 0 :(得分:1)
这适用于对您自己的命名空间的修改。 using
指令的目的是从不同的命名空间导入符号。例如,一个臭名昭着的习语:
namespace my_stuff
{
template <typename Container>
void my_fn( Container& xs )
{
using std::begin;
using std::end;
std::sort( begin(xs), end(xs) );
}
}
所有内容都发生在您的 my_namespace
中,但如果需要,它会提供std::begin()
和std::end()
个功能。如果存在begin()
和end()
的更本地定义更好地匹配Container类型,则将使用它。如果您只是将所有内容都包装在std命名空间中,那么这种有用的功能就会丢失。
希望这有帮助。
答案 1 :(得分:1)
我不确定与
围绕实施的区别namespace namespace_name { }
这是将您自己的代码放在命名空间中,而不是使用其他命名空间中的某些名称。假设您在draw
命名空间内编写了Graphics
函数 - 要执行此操作,请将draw
的代码包装在namespace Math { void draw() { /* some code */ } }
中并使用它&#39} ; d做Graphics::draw
。但是,如果您需要在gamma
命名空间(您没有写过)中使用某个功能Math
,那么您可以将其称为Math::gamma
编译器知道在哪里搜索gamma
。或者,您可以使用速记来删除Math::
部分。
我想这只是用于使用简写名称?
是的,允许在没有限定符的情况下使用某些命名空间中的标识符。有两种方法可以做到。
using namespace Math;
)using Math::gamma
) - 这通常比前者好。但是,我们鼓励两者仅在实现/源文件中使用,而不是在标题中使用,以避免某些源可能拥有自己的gamma
副本并且不想使用{{ 1}},但由于你在标题中有它,它会引起名字的冲突。有关"using namespace" in c++ headers的更多详情。