using
关键字的这两种用法有何区别:
using boost::shared_ptr;
和
using namespace boost;
答案 0 :(得分:35)
using boost::shared_ptr;
仅包含当前命名空间中shared_ptr
命名空间的boost
。
这意味着您可以使用shared_ptr
而无需使用命名空间boost
对其进行限定。
它被称为使用声明。
using namespace boost;
包含当前范围中boost
命名空间中的所有符号。
这意味着您可以使用boost
命名空间中的所有符号,而无需使用命名空间boost
限定它们。
它被称为使用指令。
为什么您总是希望using declaration
优先于using directive
?
最好使用第一个(using declaration
)并避免使用第二个(using directive
),因为第二个引起潜在的大量名称会导致名称空间污染在当前命名空间中,其中许多是不必要的。不必要的名称的存在极大地增加了意外名称冲突的可能性。
引用Herb Sutter
使用using directive
:
我认为将using directive
视为疯狂野蛮人的掠夺军队,无论何时经过不分青红皂白的破坏都会让人感到有帮助 - 仅凭存在就会导致{{1}即使你认为自己与之结盟也是如此。
答案 1 :(得分:4)
using namespace boost
使boost
命名空间中的所有名称都可见而无需限定using boost::shared_ptr
只会在无资格的情况下显示shared_ptr
。答案 2 :(得分:3)
第一个称为using declaration
;
第二个称为using directive
。
引用MSDN:
请注意using指令和using之间的区别 声明:
使用声明允许个人姓名 没有资格使用,
using指令允许所有名称 在没有限定条件的情况下使用的命名空间。
答案 3 :(得分:1)
第一个只允许你使用名称shared_ptr而不使用boost ::前缀。第二个允许您使用boost命名空间中的任何和所有名称而不使用boost ::前缀。有些人对后者感到不满,但从来没有给我任何问题。