无法将'<brace-enclosed initializer list>'转换为'double'作为回报

Jac*_*nkr 0 c++ arduino

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

为什么这样做

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

  double ret[3] = {p, r, y};
  return ret;
}
Run Code Online (Sandbox Code Playgroud)

但事实并非如此

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

  return {p, r, y};
}
Run Code Online (Sandbox Code Playgroud)

Nat*_*ica 6

你的代码块都不起作用.

第一个编译,但在返回指向不再存在的数组的指针时引入未定义的行为.有关此问题的详细答案,请参阅本地变量的内存是否可以在其范围之外访问?

第二个代码块无法编译,因为{p, r, y}它不是a的有效初始化程序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;
}
Run Code Online (Sandbox Code Playgroud)

  • @Jacksonkr:`delete []`特定于`new []`,而`delete`特定于`new`. (3认同)