首先,我看到了this question .
我很好奇为什么以下内容不起作用:
float vcolor[4]{color.getX(),color.getY(),color.getZ(),1.0f};
float v1[3]{from.getX(),from.getY(),from.getZ()};
float v2[3]{to.getX(),to.getY(),to.getZ()};
std::vector<Vertex> v={{v1,vcolor},{v2,vcolor}};
No matching constructor for initialization of 'std::vector'
但是直接传递元素可以正常工作(如另一个问题中所述):
std::vector<Vertex> v={
{{from.getX(),from.getY(),from.getZ()},
{color.getX(),color.getY(),color.getZ(),1.0f}},
{{to.getX(),to.getY(),to.getZ()},
{color.getX(),color.getY(),color.getZ(),1.0f}}};
前者不应该也可以吗?
最佳答案
这是一个简单的解释。您可以使用聚合初始化语法初始化数组,如 float arr[4] = { 1.f, 2.f, 3.f, 4.f }
。这就是 Vertex v = { {1.f, 2.f, 3.f}, {1.f, 2.f, 3.f, 4.f} }
起作用的原因。你不能做的是从另一个数组复制初始化一个数组。所以
float arr[4] = { 1.f, 2.f, 3.f, 4.f };
float brr[4] = arr;
没用。因此,最终,在您的问题中,第一种形式不起作用。
关于c++ - 在 vector 大括号初始化中将 C 数组传递给结构初始值设定项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35103025/