вопрос о классе и функции-члене - PullRequest
0 голосов
/ 01 октября 2019

У меня есть вопрос по поводу кода ниже (c ++), это всего одна строка.

if (mkvparser::EBMLHeader().Parse(m_reader, pos))

здесь mkvparser - это пространство имен, EBMLHeader - в mkvparser.

EBMLHeader () означает, чтоconsturctor, после построения EBMLHeader без параметра, затем получить доступ к функции Parse ??

это сокращение ниже двух строк?

mkvparser::EBMLHeader ebmlclass();

ebmlclass.parse(m_reader, pos)

я прав?

пожалуйста, объяснитеэтот код.

общий код находится по ссылке ниже. https://github.com/zaps166/libsimplewebm/blob/master/WebMDemuxer.cpp

1 Ответ

0 голосов
/ 01 октября 2019

Для первого случая :

mkvparser::EBMLHeader ebmlclass; //No () as it has nothing to be passed in

ebmlclass.parse(m_reader, pos)

Вы создаете mkvparser::EBMLHeader объект, затем запускаете функцию-член mkvparser::EBMLHeader::parse(...) для объекта ebmlclass

Для второго случая :

mkvparser::EBMLHeader().Parse(m_reader, pos)

Аналогичным образом вы создаете объект mkvparser::EBMLHeader, однако затем объект запускается функцией-членом mkvparser::EBMLHeader::parse(...). Оба эффективно делают одно и то же. Однако один из них сохраняет объект ebmlclass, который можно использовать позже.

Следовательно, первый случай лучше, чем если бы вам пришлось использовать ebmlclass несколько раз, а второй случай лучше с точки зрения читаемость и "компактность" для одного случая.

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

...