C ++使用关键字

时间:2011-08-07 13:43:31

标签: c++ namespaces using-declaration

using关键字的这两种用法有何区别:

using boost::shared_ptr;

using namespace boost;

4 个答案:

答案 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 ::前缀。有些人对后者感到不满,但从来没有给我任何问题。