C++使用关键字
C++ using keyword
这两种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::前缀。有些人反对后者,但它从来没有给我带来任何问题。
- Visual Studio 2015:Extern "C" 和 "export" 关键字
- C++中的"inline"关键字
- 如何确保C++函数在定义之前声明(如override关键字)
- 谷歌模拟和覆盖关键字
- 结构体 S { int align; } 之间的区别;(struct 关键字后的名称)和 struct { int al
- 如果全局变量默认是外部变量,为什么要添加"extern"关键字?
- 当我从下面的代码中删除关键字 virtual 时,它可以正常工作,否则会出现错误。在这里"virtual"字的意义是什么?
- 为什么"delete"关键字不删除节点?
- 在 c++ 中正确定义"this"关键字?
- 这个额外的关键字在这个 c++ 类声明中是什么意思?
- 在 typedef 内部使用 const 关键字和在 typedef 外部使用 const 关键字之间有区别吗?
- C++ - 为什么这里需要'template'关键字?
- C++函数的关键字?
- 使用 'typename' 关键字将非类型视为依赖上下文中的类型
- "friend"关键字在C++中是什么意思?
- 声明C++数组(带或不带 "new" 关键字)
- 对齐和对齐的实际用例C++关键字
- 在 c++ 中三元运算符中不允许继续(关键字)吗?
- 考虑到其他好处,关键字'auto'真的有助于简化调试C++吗?
- 在 Objective-C++ -> EXC_BAD_ACCESS Error 中使用"new"关键字