在函数中传递const int的值以初始化数组

时间:2016-05-05 20:41:50

标签: c++ arrays

我理解数组需要有一个const int来初始化,所以我在main中有这个。我想要这个主要是因为我希望能够在必要时轻松修改这些数字。

const int magicWordCount = 10;
compareWords(magicWordCount);

此功能的声明是:

void compareWords(const int);

定义:

void Words::compareWords(const int magicWordCount)
{
std::string magic[magicWordCount] = {};
convertToStringArray(magicBuffer, magicBufferLength);
}

当我这样做时,定义中的“magicWordCount”被intellisense强调告诉我,表达式必须具有常量值。我对这个值不恒定的地方感到困惑。想法?

3 个答案:

答案 0 :(得分:6)

虽然magicWordCountconst,但就编译器而言,它是一个运行时常量,而不是编译时常量。换句话说,它可以确保在magicWordCount内不会更改Words::compareWords的值。

这不足以声明具有特定大小的数组:编译器(和intellisense)要求编译时常量; magicWordCount 不是编译时常量。

您可以使用std::vector而不是数组来避免此问题:

std::vector<std::string> magic(magicWordCount);

即使没有const,上述内容也会有用。

答案 1 :(得分:0)

您可以将magicWordCount放在Word类标题中,高于您的类定义。它在那里仍然很容易访问,你不必再将其作为函数参数传递。

答案 2 :(得分:-4)

这是关于数组的问题 因为数组存储在本地范围内 这意味着如果它没有const大小(在编译之前定义),它可能会造成缓冲区溢出攻击 例如,const int magicWordCount = 1000 string []的大小绝对会覆盖返回点 所以在这种情况下你可能会使用指针

string* str = (string*)malloc(sizeof(string*) * a);
for(int i = 0; i < a; i++){str[i] = "";}

并且对我来说,从不使用数组,而是使用指针 因为数组执行的性能非常糟糕,而且读/写的逻辑很奇怪