C++ C++;使用关键字
使用关键字的这两种用法之间有什么区别:C++ C++;使用关键字,c++,namespaces,using-declaration,C++,Namespaces,Using Declaration,使用关键字的这两种用法之间有什么区别: using boost::shared_ptr; 及 仅包括当前命名空间中boost命名空间中的shared_ptr。 这意味着您可以使用shared_ptr,而无需使用名称空间boost对其进行限定 使用声明将其称为 包括当前作用域中boost命名空间中的所有符号。 这意味着您可以使用boost名称空间中的所有符号,而无需使用名称空间boost对它们进行限定 使用指令将其称为 为什么您总是喜欢使用声明而不是使用指令? 最好使用第一个(使用声明),避
using boost::shared_ptr;
及
仅包括当前命名空间中boost
命名空间中的shared_ptr
。
这意味着您可以使用shared_ptr
,而无需使用名称空间boost
对其进行限定
使用声明将其称为
包括当前作用域中
boost
命名空间中的所有符号。
这意味着您可以使用boost
名称空间中的所有符号,而无需使用名称空间boost
对它们进行限定
使用指令将其称为
为什么您总是喜欢
使用声明
而不是使用指令
?
最好使用第一个(使用声明
),避免使用第二个(使用指令
),因为第二个会导致名称空间污染,因为它可能会将大量名称引入当前名称空间,其中许多名称是不必要的。不必要名称的存在极大地增加了意外名称冲突的可能性
引用Herb Sutter关于使用指令的用法:
我觉得将指令
视为一支疯狂野蛮人的劫掠大军是很有帮助的,无论它经过哪里,它都会肆无忌惮地进行破坏——仅仅是它的存在就可能导致意外冲突,
即使您认为自己与之结盟。
第一个仅允许您使用共享的名称,而不使用boost::前缀。第二种方法允许您使用boost命名空间中的任何和所有名称,而不使用boost::前缀。有些人不喜欢后者,但这从来没有给我带来任何问题。
使使用名称空间boost
名称空间中的所有名称在没有限定的情况下可见boost
只会使使用boost::shared_ptr
在没有限制的情况下可见shared_ptr
- 第一个被称为
第二个被称为
引用MSDN:
注意using指令和using指令之间的区别
声明:
using声明允许使用单个名称
无条件使用
using指令允许所有名称
在未经限定的名称空间中使用
是的,这是必要的,因为它显著减少了名称空间污染。@DeadMG
使用名称空间
广泛用于标准库头文件中。在这种情况下,污染是故意的。@David:快速搜索gcc4.2中的stantard头发现,另一方面,只有debug/debug.h
(这是一个实现细节)使用了使用namespace
指令,<代码>使用声明使用超过1000次。@ ALS:答案是缺少一些细节,我觉得懒得去查找它们并检查标准,但是您可以考虑在一个类中实现一个成员函数:<代码>结构> x{int d;无效交换(x和其他){使用STD:::SWAP;SWAP;(d,other.d);}正确,但用using指令替换using声明将无法编译。@David Heffernan:If by“不一定”我同意你的意思,你的意思是有时最好避免使用使用
。另一方面,如果你的意思是有时使用命名空间
是首选,我同意。
using namespace boost;
using boost::shared_ptr;
using namespace boost;