以下将结构添加到列表的方法是否有效?

#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,这意味着它允许从intTabState的隐式转换。

  • 因此,m_tabs.push_back(77)隐式将int转换为TabState。任何期望TabState的函数都会发生这种情况,而不仅仅是push_back

    10-08 11:23