17

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

using boost::shared_ptr;

using namespace boost;
4

4 回答 4

35
using boost::shared_ptr;

仅包括shared_ptr来自boost当前命名空间中的命名空间。这意味着您可以使用 而shared_ptr不用 namespace 限定它boost

它被称为using 声明


using namespace boost;

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

它被称为using 指令


为什么你总是更喜欢using declarationover using directive

using declaration使用第一个( )并避免使用第二个( )总是更好,因为第二个通过将潜在的大量名称引入当前命名空间而using directive导致命名空间污染,其中许多是不必要的。不必要名称的存在大大增加了意外名称冲突的可能性。

引用: Herb Sutter_using directive

我发现将using directive一支由疯狂的野蛮人组成的掠夺大军想象成是很有帮助的,它在所到之处播下不分青红皂白的破坏——unintended conflicts,即使你认为自己与它结盟,它的存在也可能导致这种情况。

于 2011-08-07T13:45:06.077 回答
4
  • using namespace boost使boost命名空间中的所有名称都可见,无需限定
  • using boost::shared_ptr只是shared_ptr没有条件地使可见。
于 2011-08-07T13:46:26.687 回答
3

第一个叫做using declaration;

第二个叫做using directive

引用 MSDN:

注意 using 指令和 using 声明之间的区别:

using 声明允许无限制地使用个人名称,

using 指令允许无限制地使用命名空间中的所有名称。

于 2011-08-07T13:46:30.890 回答
1

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

于 2011-08-07T13:45:49.513 回答