以下将结构添加到列表的方法是否有效?
#include <list>
#include <iostream>
struct TabState
{
TabState( int p ):
a(p),
b(2),
c(55),
d(453),
e(25521)
{}
int a,b,c,d,e;
};
std::list<TabState> m_tabs;
int main(int argc, char* argv[])
{
m_tabs.push_back(77);
std::list<TabState>::iterator iter;
for(iter = m_tabs.begin(); iter != m_tabs.end(); ++iter)
{
TabState test = *iter;
std::cout <<
test.a << "\n" <<
test.b << "\n" <<
test.c << "\n" <<
test.d << "\n" <<
test.e << "\n";
}
return 0;
}
push_back()函数是否总是自动创建一个实例?如果是这样,是否消除了在将其推入列表之前手动创建结构实例的需要?
最佳答案
这里发生的所有事情都是隐式转换。
m_tabs.push_back
期望使用TabState
或可转换为的某种形式。 TabState
具有一个参数构造函数,该构造函数采用未标记为explicit
的int,这意味着它允许从int
到TabState
的隐式转换。 因此,
m_tabs.push_back(77)
隐式将int
转换为TabState
。任何期望TabState
的函数都会发生这种情况,而不仅仅是push_back
。