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

标签 c++

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

相关文章:

c++ - 通过 std::enable_if_t 传递被调用方法的返回值

c++ - vector<T>::swap 和临时对象

c++ - 有没有办法先析构再移动构造一个多态基类?

c++ - 如何简化代码,将switch合并为一个函数?

c++ - 在 C++ 中读取 csv 列名

c++ - GCC/G++ 对 : void* to int 的不同态度

c++ - 有没有不能在STL中使用的c++类?

c++ - "Does not name a type"错误,即使我在分配值之前声明正确

c# - 在 .Net 应用程序中调用 C++ Dll 时出现 System.Access 冲突异常

c++ - 结构体上的指针运算