Es kann nur eine Entität mit einem bestimmten Namen in einem bestimmten Gültigkeitsbereich existieren. Dies ist bei lokalen Namen selten ein Problem, da Blöcke in der Regel relativ kurz sind und Namen in ihnen bestimmte Zwecke erfüllen, z. B. die Benennung einer Zählervariable, eines Arguments usw.
Aber nicht lokale Namen bringen mehr Möglichkeiten für Namenskollisionen mit sich, insbesondere wenn man bedenkt, dass Bibliotheken viele Funktionen, Typen und Variablen deklarieren können, von denen keine lokaler Natur sind und einige sehr allgemein sind.
Namespaces ermöglichen es uns, benannte Entitäten, die sonst einen globalen Gültigkeitsbereich hätten, in engere Gültigkeitsbereiche zu gruppieren und ihnen Namespace-Gültigkeit zu geben. Dies ermöglicht die Organisation der Elemente von Programmen in verschiedene logische Gültigkeitsbereiche, auf die durch Namen verwiesen wird.