我是一位经验丰富的python程序员,尝试学习C ++。我在初始化固定大小的整数数组时遇到问题。
我已经读过this,但是将我的整数创建为常量并不能解决我的问题。我在这里想念什么?
顺便说一句,我正在使用VS2019社区,任何帮助将不胜感激!
#include <iostream>
#include <sstream>
int numericStringLength(int input) {
int length = 1;
if (input > 0) {
// we count how many times it can be divided by 10:
// (how many times we can cut off the last digit until we end up with 0)
for (length = 0; input > 0; length++) {
input = input / 10;
}
}
return length;
}
int convertNumericStringtoInt(std::string numericString) {
std::stringstream data(numericString);
int convertedData = 0;
data >> convertedData;
return convertedData;
}
int main() {
std::string numericString;
std::cout << "Enter the string: ";
std::cin >> numericString;
const int length = numericStringLength(convertNumericStringtoInt(numericString));
std::cout << "Length of Numeric string: " << length << "\n";
int storage[length];
}
答案 0 :(得分:4)
但是将我的整数创建为常量并不能解决我的问题
仅将数组长度设为const
是不够的。必须为编译时间。 const
仅表示该对象在其整个生命周期中都不会发生变化-即它暗示了运行时常量。由于length
不是编译时间常数,因此程序格式错误。编译时间常数的值示例:
constexpr
变量const
个具有编译时常数初始化程序的变量(我不确定这可能有一些限制)从程序中应该很清楚,长度是根据用户输入来计算的,这在编译程序时是不可能做到的。因此,由于无法使其成为编译时间常数,因此无法使用数组变量。您需要动态分配数组。最简单的解决方案是使用向量:
std::vector<int> storage(length);
答案 1 :(得分:2)
仅使用变量const
。
const
的意思是“初始化后我将不会更改”。它必须是一个 compile-time 常量,因为基本C数组的机制被烘焙到形成可执行文件的计算机指令中。
您将不得不使用向量或其他一些可动态调整大小的数组类型。
答案 2 :(得分:1)
如果要使用固定大小的数组,可以使用std::array
,例如:
std::array<int, 3> arr { 1,2,3 };
// ^
// fixed size needs to be known at compile time
如果在编译时不知道大小,请使用std::vector
答案 3 :(得分:1)
您遇到的问题是length
是一个运行时常量,其值是在程序运行时计算的。这与 compile-time 常量相反,该常量的值在编译程序时由编译器知道。
数组的大小需要编译时常量。
如果大小在编译时未知,而仅在运行时未知,则应使用std::vector
。