Namespaces in C++ are not the same at all than in .Net, ActionScript and Java (that shares the same concept). They are not the same concept at all.
In C++, namespaces are primarly there to allow encapsulation of several types and functions in a named context, the namespace. It's only about naming and accessing names.
In .Net, ActionScript and Java, namespaces are more about modules than names. They forces the developper to organize his code in separate namespaces that are each about one purpose, context. As those languages are dynamic (instead of static like C++), the namespaces allow late binding of types to code, making compilation fast because you only have to have the canonical name (namespace + name) of the type you want to use in a file.
In C++ there is no module comcept, only compilation units that don't know at all about each other.
Now about their usage, it's often good practice to use a namespace in C++ to encapsulate a module (executable or dll/so), some implementation code or any useful sub part of code. That said most of the time it's better to not have a too deep hierarchy of namespaces.
For historical reasons, a lot of C++ developers didn't even knew for a very long time that C++ had a feature named namespace. Now what we call "modern C++" suggest that you know about it, but a lot of old C++ code is still used today and maybe that's what you're looking at when talking about namespaces.
Namespaces in C++ being a different feature than in other languages makes also it's writing more or less apparent in code. In fact, it's so different that you'll not manage it the same way at all, making code really hard to understand when you're coming from say .Net.
So you shouldn't take namespaces the same way between languages, they are really different concepts.