我正在用 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};
}
最佳答案
您的代码块都不起作用。
第一个编译但在您返回指向不再存在的数组的指针时引入未定义的行为。有关此问题的非常详细的答案,请参阅 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;
}
关于c++ - 无法将 '<brace-enclosed initializer list>' 转换为 'double' 作为返回,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38837859/