在函数中使用 const int size 参数创建数组会在 Visual Studio 中抛出错误 C++:表达式的计
Creating array with const int size parameter in a function throws error in Visual Studio C++: expression did not evaluate to a constant
void foo(const int size) {
char array[size];
}
int main() { }
上面的代码在Visual Studio C++中抛出编译器错误:
error C2131: expression did not evaluate to a constant
note: failure was caused by a read of a variable outside its lifetime
为什么即使size
声明为const int
,它也没有被评估为常量?
但以下代码编译成功:
int main() {
const int size{ 10 };
char array[size];
}
这之所以编译,是因为大小确实是恒定的。
int main() {
const int size{ 10 };
char array[size];
}
但是,这不会编译,因为大小是一个常量变量,而不是编译时常量(有一个细微的区别(
void foo(const int size) {
char array[size];
}
它不起作用的原因是因为我可以用不同的参数调用 foo。
foo(10);
foo(42);
foo(1);
最简单的解决方法是使用 std::vector,这就是您正在尝试做的......
void foo(const int size) {
std::vector<char> array(size);
}
现在,"数组"将以与原始代码相同的意图工作。
C++是一种静态类型语言,char array[1]
和char array[2]
是不同的类型,因此必须在编译时知道这些类型。
例如
void foo(const int size) {
char array[size];
}
int main() {
int x = std::rand() % 1000;
foo( x ); // Error
}
在这种情况下,编译器无法在编译时知道char array[size]
的类型,因为大小是在运行时决定的,因此这是一个错误。
因此,@Frodyne注释中所述,静态数组的大小必须是常量表达式
数组的大小需要是一个编译时常量,而不仅仅是运行时const
。
由于常量变量大小初始化为"10",因此无法修改大小的值。数组的大小是固定的,无法更改。
int size = 10;//可以更改大小的值。
相关文章:
- 使用 Visual Studio 2019 构建 Hello World wxwidgets 应用程序时出错
- 在Visual Studio中使用vcpkg使用paho-mqtt x64时出错
- 使用 Visual Studio 代码读取 C++ 中的输入流时出错
- 将 boost 与 Visual Studio 和 vcpkg 链接时出错
- 将项目导入 Android Studio 后出错
- 将 Dr. Memory 与 Visual Studio 项目配合使用时出错:缺少应用程序所需的库
- 尝试返回指向 Visual Studio 中的动态数组的指针时出错C++
- 在 Visual Studio 2015 中生成 vsal 项目时出错
- 构建 Dlib Visual Studio 2015 时出错
- 创建新的 Visual Studio c++ 项目时出错
- Visual Studio 2017 加载规则集文件时出错
- 使用 Visual Studio 2017 时出错:fscanf_s
- 在另一台计算机上打开 Visual Studio 项目的.exe时出错
- 在Visual Studio中使用Cygwin编译的dll的库函数时出错
- 将事件处理程序添加到任何控件都会导致 Visual Studio 中出错
- 在 Visual Studio 2015 社区中消除错误时出错
- 在C++Visual Studio 2012中创建类时出错
- 使用Visual Studio构建Freetype应用程序时出错
- 在Visual Studio 2013上使用OpenCV 2.4.10时出错
- Visual Studio报告对结构向量的push_back()函数调用出错