如何创建恒定长度的C ++整数数组?

时间:2019-09-09 11:54:32

标签: c++ arrays

我是一位经验丰富的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];
}

4 个答案:

答案 0 :(得分:4)

  

但是将我的整数创建为常量并不能解决我的问题

仅将数组长度设为const是不够的。必须为编译时间const仅表示该对象在其整个生命周期中都不会发生变化-即它暗示了运行时常量。由于length不是编译时间常数,因此程序格式错误。编译时间常数的值示例:

  • 诸如42之类的文学
  • 模板参数
  • 枚举
  • 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