“使用 T::member” 和 “using T::member” 有什么区别?和“使用命名空间”?

发布于 2024-11-28 02:30:44 字数 151 浏览 3 评论 0原文

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

using boost::shared_ptr;

using namespace boost;

What is the difference between these two usage of using keyword:

using boost::shared_ptr;

and

using namespace boost;

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

别念他 2024-12-05 02:30:44
using boost::shared_ptr;

仅包含当前命名空间中 boost 命名空间中的 shared_ptr
这意味着您可以使用 shared_ptr,而无需使用命名空间 boost 对其进行限定。

它称为using 声明


using namespace boost;

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

它被称为using 指令


为什么你总是更喜欢 using 声明 而不是 using 指令

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

引用 Herb Sutter 关于 using 指令 的用法:

我发现将 using 指令 视为由疯狂的野蛮人组成的掠夺大军,所到之处都会肆意破坏——只要它的存在就可能导致意想不到的冲突,即使你认为自己与它结盟。

using boost::shared_ptr;

Includes only the shared_ptr from the boost namespace in your current namespace.
This means you can use the shared_ptr without qualifying it with namespace boost.

It is called a using declaration.


using namespace boost;

Includes all the symbols in the boost namespace in your current scope.
This means you can use all the symbols in the boostnamespace without qualifying them with namespace boost.

It is called as using directive.


Why should you always prefer using declaration over using directive?

It is always better to use the first(using declaration) and avoid the second(using directive) because the second causes namespace pollution by bringing in potentially huge numbers of names in to the current namespace, many of which are unnecessary. The presence of the unnecessary names greatly increases the possibility of unintended name conflicts.

To quote Herb Sutter on the usage of using directive:

I find it helpful to think of a using directive as a marauding army of crazed barbarians that sows indiscriminate destruction wherever it passes--something that by its mere presence can cause unintended conflicts, even when you think you're allied with it.

所有深爱都是秘密 2024-12-05 02:30:44
  • using namespace boost 使 boost 命名空间中的所有名称无需限定即可可见
  • using boost::shared_ptr 只是使 shared_ptr 可见无资格。
  • using namespace boost makes all names in the boost namespace visible without qualification
  • using boost::shared_ptr just makes shared_ptr visible without qualification.
静若繁花 2024-12-05 02:30:44

第一个称为使用声明< /代码>;

第二个称为 using 指令< /代码>

引用MSDN:

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

using 声明允许使用个人名称
无资格使用,

using 指令允许所有名称
在命名空间中无需限定即可使用。

The first is called using declaration;

The second is called using directive.

Quoting MSDN:

Note the difference between the using directive and the using
declaration:

the using declaration allows an individual name to be
used without qualification,

the using directive allows all the names
in a namespace to be used without qualification.

泪冰清 2024-12-05 02:30:44

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

The first only allows you to use the name shared_ptr without the boost:: prefix. The second allows you to use any and all names in the boost namespace withoout the boost:: prefix. Some people frown on the latter but it's never given me any problems.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文