无法转换&#39; <brace-enclosed initializer =“”list =“”>&#39;到&#39;加倍作为回报

时间:2016-08-08 20:21:20

标签: c++ arduino

我正在用c ++编写Arduino程序并提出以下问题:

为什么这样做

double* getArray() {
  double p, r, y;

  double ret[3] = {p, r, y};
  return ret;
}

但这并不是

double* getArray() {
  double p, r, y;

  return {p, r, y};
}

1 个答案:

答案 0 :(得分:6)

您的代码块都不起作用。

第一个编译但是在返回指向不再存在的数组的指针时会引入未定义的行为。有关此问题的详细答案,请参阅Can a local variable's memory be accessed outside its scope?

第二个代码块无法编译,因为{p, r, y}不是double*的有效初始值设定项。

这里您真正需要的是std::vector<double>std::array<double, some_constant_size>std::unique_ptr<double[]>。如果您不能使用其中任何一个,那么您需要动态创建数组,然后您需要记住删除该数组时,如果

double* getArray() {
    double * arr = new double[3]{1,2,3};
    return arr;
}

int main() {
    double* foo = getArray();
    // use array here
    delete [] foo;
}