我理解数组需要有一个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强调告诉我,表达式必须具有常量值。我对这个值不恒定的地方感到困惑。想法?
答案 0 :(得分:6)
虽然magicWordCount
是const
,但就编译器而言,它是一个运行时常量,而不是编译时常量。换句话说,它可以确保在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] = "";}
并且对我来说,从不使用数组,而是使用指针 因为数组执行的性能非常糟糕,而且读/写的逻辑很奇怪