gpt4 book ai didi

c++ - STL列表中结构的自动初始化

转载 作者:行者123 更新时间:2023-11-30 03:51:38 29 4
gpt4 key购买 nike

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

#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() 函数总是自动创建一个实例吗?如果是这样,它是否避免了在将结构实例插入列表之前手动创建结构实例的需要?

最佳答案

Is the following method of adding structures to the list valid?

我没有看到代码中有任何无效内容。

Does the push_back() function always create an instance automatically?

是的。

If so, does it obviate the need to manually create a structure instance before pushing it into the list?

push_back 不,它没有。您确实需要将一个对象传递给它。这是因为 push_back 通过从函数参数复制或移动来创建新实例。这就是你实际所做的。 TabState 有一个采用 int 的非显式构造函数,因此当您将 int 传递给 push_backTabStateTabState&&,然后传递的 int 将使用该构造函数隐式转换为 TabState。该临时对象将传递给 push_back

但是,emplace_back 直接将参数转发给构造函数,因此没有中间对象。

关于c++ - STL列表中结构的自动初始化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31156322/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com