C++使用关键字

C++ using keyword

本文关键字:关键字 C++      更新时间:2023-10-16

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

using boost::shared_ptr;

using namespace boost;
using boost::shared_ptr;

在当前命名空间中仅包括boost命名空间中的shared_ptr。这意味着您可以使用shared_ptr,而无需将其限定为命名空间boost

它被称为使用声明


using namespace boost;

包括当前作用域中boost命名空间中的所有符号。这意味着您可以使用boost命名空间中的所有符号,而无需使用命名空间boost限定它们。

使用指令将其称为


为什么您总是喜欢using declaration而不是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指令允许所有名称在没有限定的情况下使用的命名空间中。

第一个只允许您使用不带boost::前缀的名称shared_ptr。第二个允许您使用boost命名空间中的任何和所有名称,而不使用boost::前缀。有些人反对后者,但它从来没有给我带来任何问题。