не могу понять код c++

void my_namespace::object::output_info(wfstream & wfst)

почему название этой функции такое большое? зачем двоеточия?

P.S. я начинающий знаю что вопрос тупой


Ответы (2 шт):

Автор решения: Andrey RF

:: - это оператор, который используется для уточнения (квалификации) имен.

Бинарный оператор :: уточняет область видимости в которой находится имя. С левой стороны должна быть указана область видимости, с правой стороны - уточняемое имя.

Предполагаю что здесь используется пространство имен, внутри которого используется объект с указанным методом.

→ Ссылка
Автор решения: HolyBlackCat

:: означает, что имя (которое справа от ::) нужно искать внутри класса/пространства имен/... (которое указано слева от ::).

Судя по названиям, my_namespace - пространство имен, в нем есть класс object, а в нем метод output_info.

Указывать ИмяКласса:: нужно, когда метод определяется отдельно от класса, пример:

class A
{
  public:
    void foo();
};

// Возможно в другом файле:
void A::foo() {...}

Указывать ПространствоИмен:: можно вместо того, чтобы заворачивать функкцию в namespace ПространствоИмен {...}.

Например этот код:

void my_namespace::object::output_info(wfstream & wfst) {...}

можно заменить на:

namespace my_namespace
{
    void object::output_info(wfstream & wfst) {...}
}

Но это работает только если функция уже объявлена. Пример:

// Без этой строки работать не будет:
namespace A {void foo();}

void A::foo() {...}
→ Ссылка