У меня есть функция, которая получает указатель на массив в стиле C.Когда я явно устанавливаю тип переменной twoDArray
и затем компилирую код с помощью Clang, я получаю следующую ошибку:
main.cpp:8: error: variable-sized object may not be initialized
const T (&twoDArray)[dim1][dim2]{*reinterpret_cast<const T (*)[dim1][dim2]>(cVector)};
Когда я закомментирую строку и использую закомментированную часть, код скомпилируетсяправильно.Когда я использую g ++ для компиляции кода, будут приняты оба варианта.
Это ошибка в компиляторе Clang, или g ++ принимает некоторый код в этом случае, который является нестандартным?
#include <iostream>
using namespace std;
void printVector(const double *cVector, const size_t dim1, const size_t dim2)
{
const double (&threeDArray)[dim1][dim2]{*reinterpret_cast<const double (*)[dim1][dim2]>(cVector)};
// auto threeDArray{*reinterpret_cast<const double (*)[dim1][dim2]>(cVector)};
}
int main()
{
const size_t VEC_SIZE{2};
double cVector[VEC_SIZE][VEC_SIZE]{{1.1, 2.2}, {3.3, 4.4}};
size_t vecSize{VEC_SIZE};
printVector(&cVector[0][0], vecSize, vecSize);
return 0;
}