【发布时间】:2020-08-24 19:36:49
【问题描述】:
假设我有一个带有int、double 和std:string 的小结构。
我有一个vector 这些结构。
高效的 C 解决方案是分配数组,然后循环并设置字段的值。每个值只计算一次,并存储在它的最终位置。
在 C++11 中,我可以使用 emplace_back() 来避免在堆栈上创建临时结构,然后将其复制到向量内存中,然后删除临时结构。但是我向emplace_back() 提供了一个大括号括起来的初始化器列表,编译器抱怨没有匹配的函数来调用带有大括号的初始化器列表的emplace_back。
那么在这种情况下我必须编写一个三参数的公共构造函数吗?如果我这样做,它会像 C 版本一样高效吗?
【问题讨论】:
-
为什么是
{}?emplace_back接受可变数量的参数,所以你可以这样做emplace_back(i, d, s);也许我误解了这个问题。你能显示你有问题的代码吗? -
您的意思是聚合吗? (而不是 POD)
-
包含像
std::string这样的非 POD 的东西也不是 POD。