LINUX.ORG.RU

Сообщения unskill

 

Сумма чисел двумерного массива во время компиляции

Сяп, лор!

Хочу посчитать сумму элементов в двумерном массиве:

constexpr int sum_2d_array(const int* arr, int n, int m)
{
    int s = 0;
    for (int i = 0; i < n; i++)
        for (int j = 0; j < m; j++)
            s += arr[i*m + j];
    return s;
}

int main()
{
    constexpr int arr[3][2] = { 1, 2, 3, 4, 5, 6, };
    static_assert(sum_2d_array(&arr[0][0], 3, 2) == 21);
}

Но компилятор не компилирует (https://wandbox.org/permlink/2zCNyzWAT4Txk2uV), говорит, что доступ к элементам просходит за границами массива.

Я вроде нигде за границы не вылазею. В чём проблема?

(Код написан по аналогии с кодом в Страуструпе для печати 2d-массива:

void print_mij(int∗ m, int dim1, int dim2)
{
    for (int i = 0; i!=dim1; i++) {
        for (int j = 0; j!=dim2; j++)
            cout << m[i∗dim2+j] << '\t'; // obscure
        cout << '\n';
    }
}
)

 

unskill
()

RSS подписка на новые темы