>백엔드 개발 >C++ >동적 크기로 부동 배열을 선언하면 C에서 \'Expected Constant Expression\' 오류가 발생하는 이유는 무엇입니까?

동적 크기로 부동 배열을 선언하면 C에서 \'Expected Constant Expression\' 오류가 발생하는 이유는 무엇입니까?

DDD
DDD원래의
2024-10-26 13:46:03901검색

Why Does Declaring a Float Array with a Dynamic Size Result in an

배열 크기 혼동으로 인해 오류가 발생함

다음과 같은 동적 크기의 부동 소수점 배열을 선언하는 경우:

<code class="cpp">int size = 100;
float x[size][2];</code>

"예상 상수 표현식" 오류가 발생할 수 있습니다. 이는 C에서 배열이 런타임 중에 결정되지 않고 컴파일 시간에 고정된 크기를 갖도록 요구하기 때문에 발생합니다. 여기서 크기 변수는 유효한 배열 차원으로 사용할 수 없습니다.

벡터를 사용한 솔루션

이 문제를 방지하려면 벡터 사용을 고려하세요.

<code class="cpp">std::vector<std::array<float, 2>> x(size);</code>

이렇게 하면 각 배열에 두 개의 부동 소수점이 포함된 배열 벡터가 생성됩니다.

대체 솔루션

또는 원시 메모리 할당을 new로 사용하거나 직접 생성할 수도 있습니다. 배열 유형:

<code class="cpp">// With new
float (*px)[2] = new float[size][2];

// With custom array type
template<typename T, size_t N>
struct array {
  T data[N];
};

array<float, 2> myArray[size];</code>

추가 옵션

다른 옵션에는 쌍의 벡터 사용 또는 구문 도우미를 사용하여 고유한 배열 유형 롤링이 포함됩니다.

<code class="cpp">// Vector of pairs
std::vector<std::pair<float, float>> x(size);

// Custom array type
template<typename T>
struct identity {
  typedef T type;
};

using FloatArray2 = identity<float[2]>::type;
FloatArray2 myArray[size];</code>

위 내용은 동적 크기로 부동 배열을 선언하면 C에서 \'Expected Constant Expression\' 오류가 발생하는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.