gpt4 book ai didi

c++ - 在 vector 大括号初始化中将 C 数组传递给结构初始值设定项

转载 作者:行者123 更新时间:2023-11-30 05:32:27 24 4
gpt4 key购买 nike

首先,我看到了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/

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