Кто-нибудь объяснит строку кода C++

std::ostream & _return  = ::operator<<(_os, _event)

Особенно я хотел бы знать: каков тип данных _return и как я могу распечатать его в консоли.

2 ответа

std::ostream & _return =::operator<< (_ os, _event);

Особенно мне хотелось бы знать: что такое тип данных _return и как я могу распечатать его в консоли.

Код ищет operator<< в глобальном масштабе (не в любом пространстве имен), который может принять _os а также _event объекты как параметры. Это не обязательно верно, но, учитывая, что "<<" является нормальным способом потокового вывода в C++, вы можете ожидать, что это, вероятно, будет такая функция, как:

std::ostream& operator<<(std::ostream&, const Event&);

Где Событие, какой бы тип _event объект, и я предположил _os будет какой-то тип, полученный из std::ostreamи, следовательно, может обрабатываться ссылкой на std::ostream,

Почти все такие operator<< функции возвращают свой первый аргумент потока, поэтому ваш код, вероятно, выполняет какой-то вывод, а затем эффективно присваивает _return как будто это было:

std:: ostream & _return = _os;

Здесь статический тип _return сам по себе std::ostream& - ссылка на std::ostream (Стандартный поток вывода), но тип времени выполнения будет любого типа _os имеет... это тип объекта, с которым работают _return вызовет полиморфно. Это могло быть ofstream, ostringstream или много других типов.

Как я могу распечатать его в консоли.

Не существует стандартного способа получения имен текстовых типов в C++, хотя полиморфные типы времени выполнения действительно имеют информацию о типе времени выполнения, которая включает в себя необязательное текстовое поле, которое обычно заполняется каким-либо именем типа - будет ли оно иметь полные квалификаторы пространства имен, искажение имен или что бы то ни было не указано, но вы можете попробовать это достаточно легко:

std::cout << typeid(_return).name() << '\n';

(Для GCC, смотрите Unmangling результат std::type_info::name для советов по дешифровке таких имен типов)

_return это просто переменная типа "Ссылка на std::ostream объект класса ". И он инициализируется с возвращаемым значением << оператор в глобальном пространстве имен ::operator<<(ostream& os, const some_Obj_reference& ref),

Это может быть так жеstd::ostream & _return = (_os <<_event);

Другие вопросы по тегам