Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 传递函数中常量int的值以初始化数组_C++_Arrays - Fatal编程技术网

C++ 传递函数中常量int的值以初始化数组

C++ 传递函数中常量int的值以初始化数组,c++,arrays,C++,Arrays,我知道数组需要有一个常量int才能初始化,所以我在main中有这个。我希望这主要是因为我想能够修改这些数字容易,如果必要的话 const int magicWordCount = 10; compareWords(magicWordCount); 此函数的声明是: void compareWords(const int); 定义: void Words::compareWords(const int magicWordCount) { std::string magic[magicWordC

我知道数组需要有一个常量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);
}

当我这样做时,intellisense告诉我,定义中的“magicWordCount”必须有一个常量值。我搞不清楚这个值在哪里不是常数。想法?

虽然
magicWordCount
const
,但据编译器所知,它是一个运行时常量,而不是编译时常量。换句话说,它可以确保
magicWordCount
的值不会在
words::compareWords
中更改

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

通过使用
std::vector
而不是数组,可以避免此问题:

std::vector<std::string> magic(magicWordCount);
std::向量魔法(magicWordCount);

尽管
magicWordCount
const
,但就编译器所知,它是一个运行时常量,而不是编译时常量。换句话说,它可以确保
magicWordCount
的值不会在
words::compareWords
中更改

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

通过使用
std::vector
而不是数组,可以避免此问题:

std::vector<std::string> magic(magicWordCount);
std::向量魔法(magicWordCount);

即使没有
const

也可以使用上述方法。您可以将magicWordCount放在Word类标题中,位于类定义之上。它在那里仍然很容易访问,您不必再将其作为函数参数传入。

您可以将magicWordCount放在Word类标题中,在类的定义之上。它在那里仍然很容易访问,并且您不再需要将其作为函数参数传递。

这是关于数组的问题 因为数组存储在本地范围内 这意味着如果它没有常量大小(在编译之前定义),它可能会发起缓冲区溢出攻击 例如,常量int magicWordCount=1000 字符串[]的大小将完全覆盖返回点 所以在这种情况下,您可以使用指针代替

string* str = (string*)malloc(sizeof(string*) * a);
for(int i = 0; i < a; i++){str[i] = "";}
string*str=(string*)malloc(sizeof(string*)*a);
对于(inti=0;i
我认为,永远不要使用数组,而是使用指针
因为数组的性能非常差,读/写逻辑也很奇怪,这就是数组的问题 因为数组存储在本地范围内 这意味着如果它没有常量大小(在编译之前定义),它可能会发起缓冲区溢出攻击 例如,常量int magicWordCount=1000 字符串[]的大小将完全覆盖返回点 所以在这种情况下,您可以使用指针代替

string* str = (string*)malloc(sizeof(string*) * a);
for(int i = 0; i < a; i++){str[i] = "";}
string*str=(string*)malloc(sizeof(string*)*a);
对于(inti=0;i
我认为,永远不要使用数组,而是使用指针
因为数组的性能很差,读/写逻辑也很奇怪,所以不允许使用vector。这是一份作业。我不需要这样做作业,我只是认为将常量放在main中可以轻松访问是一个很好的特性;但我还是犯了同样的错误。我不熟悉编译时常量:(您不能传入一个值并使其成为编译时常量。对函数的一次调用可以使用10和另一次调用100,从而在运行时更改
magicWordCount
的值。那么如何传递一个值来初始化数组?或者这不是一个好的做法?如果您不能使用
向量,唯一的可移植解决方案是
new[]
delete[]
一个数组。
std::string*magic=new string[magicWordCount];
这需要大量内存管理,因为您必须
delete[]magic;
当你完成它的时候。如果抛出异常或者你的函数中有多个退出点,这可能会很棘手。这里的更多信息:我们不允许使用vector。这是一个赋值。我不需要这样做赋值,我只是认为让putti轻松访问const是一个很好的特性我尝试使用:constexpr int magicWordCount=10来声明magicWordCount;但仍然出现相同的错误。我不熟悉编译时常量:(您不能传入一个值并使其成为编译时常量。对函数的一次调用可以使用10和另一次调用100,从而在运行时更改
magicWordCount
的值。那么如何传递一个值来初始化数组?或者这不是一个好的做法?如果您不能使用
向量,唯一的可移植解决方案是
new[]
delete[]
一个数组。
std::string*magic=new string[magicWordCount];
这需要大量内存管理,因为您必须
delete[]magic;
完成后。如果抛出异常或函数中有多个退出点,这可能会很棘手。这里的更多信息:magicWordCount不是常量,而是参数(或变量)使用const access意味着它可以在每次调用函数时使用不同的数字,但不会在函数中更改。在运行时创建数组的标准方法是使用std::vector(如果要调整大小)或std::