using
这两种关键字用法有什么区别:
using boost::shared_ptr;
和
using namespace boost;
using
这两种关键字用法有什么区别:
using boost::shared_ptr;
和
using namespace boost;
using boost::shared_ptr;
仅包括shared_ptr
来自boost
当前命名空间中的命名空间。这意味着您可以使用 而shared_ptr
不用 namespace 限定它boost
。
它被称为using 声明。
using namespace boost;
boost
包括当前范围内命名空间中的所有符号。这意味着您可以使用命名空间中的所有符号,boost
而无需使用命名空间限定它们boost
。
它被称为using 指令。
为什么你总是更喜欢using declaration
over using directive
?
using declaration
使用第一个( )并避免使用第二个( )总是更好,因为第二个通过将潜在的大量名称引入当前命名空间而using directive
导致命名空间污染,其中许多是不必要的。不必要名称的存在大大增加了意外名称冲突的可能性。
引用: Herb Sutter
_using directive
我发现将using directive
一支由疯狂的野蛮人组成的掠夺大军想象成是很有帮助的,它在所到之处播下不分青红皂白的破坏——unintended conflicts,
即使你认为自己与它结盟,它的存在也可能导致这种情况。
using namespace boost
使boost
命名空间中的所有名称都可见,无需限定using boost::shared_ptr
只是shared_ptr
没有条件地使可见。第一个叫做using declaration
;
第二个叫做using directive
。
引用 MSDN:
注意 using 指令和 using 声明之间的区别:
using 声明允许无限制地使用个人名称,
using 指令允许无限制地使用命名空间中的所有名称。
第一个只允许您使用名称 shared_ptr 没有 boost:: 前缀。第二个允许您在没有 boost:: 前缀的情况下使用 boost 命名空间中的任何和所有名称。有些人不赞成后者,但它从来没有给我带来任何问题。