C++ 关于类和成员函数的问题

C++ 关于类和成员函数的问题,c++,class,member,C++,Class,Member,我对下面的代码(c++)有一个问题 只有一行 if (mkvparser::EBMLHeader().Parse(m_reader, pos)) 这里mkvparser是名称空间,EBMLHeader在mkvparser中 EBMLHeader()表示构造无参数EBMLHeader后的constructor, 然后访问解析函数 这是下面两行的捷径吗 mkvparser::EBMLHeader ebmlclass(); ebmlclass.parse(m_reader, pos) 我说得对吗

我对下面的代码(c++)有一个问题 只有一行

if (mkvparser::EBMLHeader().Parse(m_reader, pos))
这里mkvparser是名称空间,EBMLHeader在mkvparser中

EBMLHeader()表示构造无参数EBMLHeader后的constructor, 然后访问解析函数

这是下面两行的捷径吗

mkvparser::EBMLHeader ebmlclass();

ebmlclass.parse(m_reader, pos)
我说得对吗

请解释一下这个代码

总代码在下面的链接中。
对于第一个病例

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

ebmlclass.parse(m_reader, pos)
mkvparser::EBMLHeader().Parse(m_reader, pos)
您正在创建一个
mkvparser::EBMLHeader
对象,然后在对象
ebmlclass

对于第二种情况:

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

ebmlclass.parse(m_reader, pos)
mkvparser::EBMLHeader().Parse(m_reader, pos)
类似地,您正在创建一个
mkvparser::EBMLHeader
对象,但是,该对象随后会运行成员函数
mkvparser::EBMLHeader::parse(…)
。两者实际上都做同样的事情。但是,其中一个会保留对象
ebmlclass
,以便以后使用

因此,第一种情况比必须多次使用
ebmlclass
要好,但第二种情况在可读性和单个情况下的“紧凑性”方面更好


请注意,对于第二种情况,在运行后,
mkvparser::EBMLHeader
将被销毁,因为它超出范围。

是的,您是对的。
mkvparser::EBMLHeader ebmlclass()将被视为函数声明而不是变量声明。使用
mkvparser::EBMLHeader ebmlclass