C++ 关于类和成员函数的问题
我对下面的代码(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) 我说得对吗
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第二种情况类似于类中的staic成员初始化吗?静态成员通常在对象创建之前初始化。我不确定您的确切意思。EBMLHeader()不是静态的,它在堆栈中创建一个对象。如果parse是静态的,那么您可以将其作为mkvparser::EBMLHeader::parse(…)运行