What is the difference between these two usage of using
keyword:
using boost::shared_ptr;
and
using namespace boost;
What is the difference between these two usage of using
keyword:
using boost::shared_ptr;
and
using namespace boost;
Includes only the
shared_ptr
from theboost
namespace in your current namespace. This means you can use theshared_ptr
without qualifying it with namespaceboost
.It is called a using declaration.
Includes all the symbols in the
boost
namespace in your current scope. This means you can use all the symbols in theboost
namespace without qualifying them with namespaceboost
.It is called as using directive.
Why should you always prefer
using declaration
overusing 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 ofusing 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 causeunintended conflicts,
even when you think you're allied with it.The first is called
using declaration
;The second is called
using directive
.Quoting MSDN:
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.
using namespace boost
makes all names in theboost
namespace visible without qualificationusing boost::shared_ptr
just makesshared_ptr
visible without qualification.