Const auto переменная "2d array" позволяет изменять значение в const 2d array? - PullRequest
0 голосов
/ 30 мая 2019

Так что я использую Visual Studio для этого. Я возился с созданием массивов и понял, что автоматическая переменная const как массив допускает изменение значения массива по какой-то причине? Затем я попробовал это сделать с массивом константных указателей, и это, конечно, вызывает ошибку.

Я инициализировал оба массива, чтобы установить все 0. Тем не менее, если я изменю любое значение в индексе в автоматическом массиве const, это не выдаст ошибку. Я не проверял это ни на одной другой раме.

int main()
{
    const int x = 5;
    const int y = 4;

    const auto arr = new int[x][y] (); //Sets arr to all 0's

    int a = 3; //variable to be inserted

    arr[0][0] = a; //Allows for change at index
    arr[3][2] = a; //Allows for change at index

    for (int i = 0; i < x; ++i)
    {
      for (int j = 0; j < y; ++j)
      {
         cout << arr[i][j] << " "; //Prints arr
      }         
      cout << endl;
    }

    //Now on to pointer array
    const int *pt = new int[x * y] (); //Sets pt to all 0's

    for (int i = 0; i < x; ++i)
    {
      for (int j = 0; j < y; ++j)
      {
        pt[i * y + j] = a; //Obliviously Throws modifiable error 
        cout << pt[i * y + j] << " "; 
      }
      cout << endl;
    }
}

Первый массив печатается как таковой (const auto array):

3 0 0 0

0 0 0 0

0 0 0 0

0 0 3 0

0 0 0 0

Второй массив выдает ошибку, как указано выше.

...