using这两种关键字用法有什么区别:
using boost::shared_ptr;
和
using namespace boost;
using这两种关键字用法有什么区别:
using boost::shared_ptr;
和
using namespace boost;
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,即使你认为自己与它结盟,它的存在也可能导致这种情况。
using namespace boost使boost命名空间中的所有名称都可见,无需限定using boost::shared_ptr只是shared_ptr没有条件地使可见。第一个叫做using declaration;
第二个叫做using directive。
引用 MSDN:
注意 using 指令和 using 声明之间的区别:
using 声明允许无限制地使用个人名称,
using 指令允许无限制地使用命名空间中的所有名称。
第一个只允许您使用名称 shared_ptr 没有 boost:: 前缀。第二个允许您在没有 boost:: 前缀的情况下使用 boost 命名空间中的任何和所有名称。有些人不赞成后者,但它从来没有给我带来任何问题。