创建一个非const大小的int数组

时间:2015-07-18 04:35:32

标签: c++ const

我目前正在为游戏制作插件,但我遇到了以下问题:

我想让用户选择半径,但由于C ++不允许我创建一个可变大小的数组,因此我无法获得自定义半径。

这很好用

        const int numElements = 25;
    const int arrSize = numElements * 2 + 2;
    int vehs[arrSize];
    //0 index is the size of the array
    vehs[0] = numElements;
    int count = GET_PED_NEARBY_VEHICLES(PLAYER_PED_ID(), vehs);

但是这个选择了

    int radius = someOtherVariableForRadius * 2;
    const int numElements = radius;
    const int arrSize = numElements * 2 + 2;
    int vehs[arrSize];
    //0 index is the size of the array
    vehs[0] = numElements;
    int count = GET_PED_NEARBY_VEHICLES(PLAYER_PED_ID(), vehs);

是否有任何可能的方法来修改const int而不会在

中创建错误
int vehs[arrSize];

1 个答案:

答案 0 :(得分:2)

数组大小必须是C ++中的编译时常量。

在第一个版本中,arrSize是编译时常量,因为它的值可以在编译时计算。

在第二个版本中,arrSize不是编译时常量,因为它的值只能在运行时计算(因为它取决于用户输入)。

解决此问题的惯用方法是使用std::vector

std::vector<int> vehs(arrSize);
//0 index is the size of the array
vehs[0] = numElements;

要获取指向底层数组的指针,请调用data()

int count = GET_PED_NEARBY_VEHICLES(PLAYER_PED_ID(), vehs.data());