这是considered bad practice雇用using namespace
在C + +头。它是同样一个坏主意,在头使用namespace aliasing,每个实现文件应当声明它希望使用别名?应该在头文件中使用C++名称空间别名?
由于标题是您倾向于使用完全指定名称的地方(因为我们不在名称头中使用名称空间),所以别名会很有用,但当#included
时,它们仍然会传播您的源代码。
这里的最佳做法是什么?什么是空间别名的范围是什么?
这是considered bad practice雇用using namespace
在C + +头。它是同样一个坏主意,在头使用namespace aliasing,每个实现文件应当声明它希望使用别名?应该在头文件中使用C++名称空间别名?
由于标题是您倾向于使用完全指定名称的地方(因为我们不在名称头中使用名称空间),所以别名会很有用,但当#included
时,它们仍然会传播您的源代码。
这里的最佳做法是什么?什么是空间别名的范围是什么?
如果你把一个命名空间别名到你的头,这个别名将成为你的(公共)API的一部分。
有时,这种技术被用来做ABI兼容的版本(或者至少使破损可见)是这样的:
namespace lib_v1 { ... }
namespace lib_v2 { ... }
namespace lib = lib_v2;
或更常见:
namespace lib {
namespace v1 {}
namespace v2 {}
using v2;
}
在另一方面,如果你做这只是为了节省一些打字它可能不是一个好主意。 (仍然比使用using
指令更好)
我这样做,与未命名空间是这样的:
#include <whatyouneed>
...
namespace {
typedef ...
using ..
namespace x = ...
// anything you need in header but shouldn't be linked with original name
}
// normal interface
class a: public x::...
我以前似乎没有这种范例。我会等待其他人权衡,然后再决定是否要使用它:) – 2013-03-22 15:01:18
另请参阅http://stackoverflow.com/questions/357404/why-are-unnamed-namespaces-used-and-what-是他们的好处 – podshumok 2013-03-22 15:12:07
是关于在实现文件中使用无名称的命名空间,与在头文件中使用它们没有什么不同么?任何你放入该命名空间的东西仍然可以被包含它的文件看到(在我的测试中)。 – 2013-03-22 15:32:29
如果你在你自己的命名空间中做的一切,那么它很好,不是吗?我认为,只有在全球范围内做到这一点,这才是有问题的。 – Pubby 2013-03-22 14:45:40