通过转发就地构造,我的意思是std::allocator::construct和各种 emplace 方法,例如std::vector::emplace_back。我只是发现 C++ 中的转发就地构造没有(不能?)利用列表初始化语法。结果,似乎永远无法就地构建聚合。我只想确定转发的就地构造是否不支持列表初始化,因此不支持聚合类型。这是因为语言的限制吗?有人可以提供有关此问题的标准参考吗?下面是一个插图:
虽然我们可以直接进行就地施工,例如
int(*p)[3] = ...;
new(p) int[3]{1, 2, 3};
我们不能像
std::allocator<int[3]> allo;
allo.construct(p, 1, 2, 3);