Классы и структуры определяют типы.Вы можете создать объект типа.Пространства имен просто объявляют область, в которой могут существовать другие типы, функции, объекты или пространства имен.Вы не можете создать объект типа std
(если, конечно, вы не создали тип с именем std
, который скрывал бы пространство имен std
).
Когда вы определяете функцию внутри структуры / класса (метод), вы говорите: «Эта функция является фундаментальной операцией над связанными данными».Когда вы определяете функцию внутри пространства имен, вы говорите: «Эта функция логически связана с другими функциями, типами и объектами в пространстве имен»
Редактировать
ЭтоВероятно, стоит отметить, что языки «все является объектом», такие как Java и C #, регулярно используют классы, как если бы они были пространствами имен, потому что они не допускают «свободных» функций.Это может быть то, откуда возникает путаница.Если у вас есть класс на другом языке, который не содержит ничего, кроме статических членов, вы захотите использовать пространство имен и свободные функции в версии C ++.