C++ 在函数中使用const int size参数创建数组会在Visual Studio C++;:表达式的计算结果不是常数
上述代码在Visual Studio C++中引发编译器错误:C++ 在函数中使用const int size参数创建数组会在Visual Studio C++;:表达式的计算结果不是常数,c++,visual-c++,constants,C++,Visual C++,Constants,上述代码在Visual Studio C++中引发编译器错误: void foo(const int size) { char array[size]; } int main() { } 为什么size即使声明为const int也不作为常量计算? 但以下代码编译成功: error C2131: expression did not evaluate to a constant note: failure was caused by a read of a variable outsi
void foo(const int size) {
char array[size];
}
int main() { }
为什么size
即使声明为const int
也不作为常量计算?但以下代码编译成功:
error C2131: expression did not evaluate to a constant
note: failure was caused by a read of a variable outside its lifetime
由于常量变量大小已初始化为“10”,因此无法修改大小的值。数组的大小是固定的,不能更改
int size=10;//大小的值可以更改。数组的大小需要是编译时常量,而不仅仅是运行时的
常量。这是因为大小确实是恒定的
int main() {
const int size{ 10 };
char array[size];
}
但是,这不会编译,因为大小是一个常量变量,而不是编译时常量(有细微的区别)
void foo(const int size){
字符数组[大小];
}
它不起作用的原因是,我可以用不同的参数调用foo
foo(10);
傅(42),;
傅(1),;
最简单的解决方法是使用std::vector,这就是您正在尝试的
void foo(const int size){
std::向量数组(大小);
}
现在“array”将以与原始代码相同的意图工作 C++是一种静态类型语言,char-array[1]
和char-array[2]
是不同的类型,因此在编译时必须知道这些类型
例如
在这种情况下,编译器无法在编译时知道char array[size]
的类型,因为大小是在运行时确定的,所以这是一个错误
所以正如@Frodyne在评论中所说的,静态数组的大小必须是如果你想给google一个术语,那么数组的大小必须是。const int size
只是意味着size
不能在foo
中修改,但是你可以将任何你想要的值传递给它。例如intx;标准:cin>>x;foo(x)
将完全合法。问题是“为什么大小即使声明为const int也不作为常量计算?”这如何回答这个问题?
int main() {
const int size{ 10 };
char array[size];
}
void foo(const int size) {
char array[size];
}
int main() {
int x = std::rand() % 1000;
foo( x ); // Error
}