gpt4 book ai didi

c++ - 如何在满足 constnt 表达式的同时将整数传递给指针,传递给 std::array

转载 作者:太空宇宙 更新时间:2023-11-04 12:31:14 25 4
gpt4 key购买 nike

我有一个函数 noise.cpp,它目前的形式是,

double* noise(int* steps, ...)

//some code

std::array<double, *steps> NoiseOut;

//rest of code

正在被 cppnoise.cpp 测试和访问,

#include <random>
#include <cmath>
#include<stdio.h>
#include <iostream>
#include "noise.h"

main(){

double* out;

int steps = 8;
int* ptr = &steps;

out = noise(ptr, 1, 1000, 0.1, 1, 3);
printf("TEST \n");
std::cout << out[0];

}

带头文件,

extern double* noise(int*, double, double, double, double, double); 

之前我通过 Python 访问了 noise.cpp 函数,其中 NoiseOut 数组最初是 double* NoiseOut = new double[steps]; 并取得了理想的结果,但这种方法导致了内存泄漏。

最初我尝试删除分配的内存。但是该函数返回 NoiseOut,所以我不确定这是否可能?因此,我发现现代方法是使用 std::array,因为它带有某种形式的垃圾收集。如果我尝试这样做,

double* noise(int steps, ...)

std::array<double, steps> NoiseOut;

有人告诉我 steps 不是常量表达式。我尝试了 constexprconststatic 的所有方法,但都没有成功。通常会出现相同的错误 error: ‘steps’ is not a constant expression。另外,我将指针从 cppnoise.cpp 传递到 noise.cpp 的原因是因为我在某处读到该指针更容易使用,稍后在编译时?这样也许我可以将它转换为常量表达式?大概是发烧的梦吧。

那么,我如何在程序中声明一个整数值,我将其传递给一个函数,该函数可在 std::array 中使用而不会导致该错误?

注意:我是 c++ 的新手,主要使用 SQL、Python、R 和 SageMath。

最佳答案

std::array 不适用于此,因为在代码运行之前您不知道需要什么大小。 std::array 在编译时需要知道大小。

使用 new 在运行时提供动态数组大小,这就是您以前可以使用它的原因。

如果您担心内存泄漏(或者实际上,一般而言),那么我建议使用 std::vector相反:

#include <vector>
//...
std::vector<double> NoiseOut;
NoiseOut.reserve(*steps);

一个 std::vector 应该允许你做一个 std::array 或 C Array 允许你这样做的大部分事情,尽管我建议阅读它文档(上面链接)。请注意,std::vector 也以与 std::array 相同的方式附带了它自己的各种垃圾收集。

关于c++ - 如何在满足 constnt 表达式的同时将整数传递给指针,传递给 std::array<double, integer>?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58600405/

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