Program Club

Array [n] vs Array [10]-변수 대 실수로 배열 초기화

proclub 2020. 10. 31. 10:16
반응형

Array [n] vs Array [10]-변수 대 실수로 배열 초기화


내 코드에 다음과 같은 문제가 있습니다.

int n = 10;
double tenorData[n]   =   {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};

다음 오류를 반환합니다.

error: variable-sized object 'tenorData' may not be initialized

double tenorData[10]작품을 사용하는 반면 .

왜 그럴까요?


C ++에서 가변 길이 배열은 유효하지 않습니다. G ++에서는 이것을 "확장자"로 허용하므로 (C에서 허용하기 때문에) G ++에서는 ( -pedanticC ++ 표준을 따르지 않고) 다음과 같이 할 수 있습니다.

int n = 10;
double a[n]; // Legal in g++ (with extensions), illegal in proper C++

"가변 길이 배열"(적절한 가변 길이 배열이 허용되지 않기 때문에 C ++에서 "동적 크기 배열"이라고 더 잘 함)을 원하면 메모리를 직접 동적으로 할당해야합니다.

int n = 10;
double* a = new double[n]; // Don't forget to delete [] a; when you're done!

또는 더 나은 방법은 표준 컨테이너를 사용하는 것입니다.

int n = 10;
std::vector<double> a(n); // Don't forget to #include <vector>

그래도 적절한 배열을 원하면 만들 때 변수가 아닌 상수를 사용할 수 있습니다 .

const int n = 10;
double a[n]; // now valid, since n isn't a variable (it's a compile time constant)

마찬가지로 C ++ 11의 함수에서 크기를 얻으려면 다음을 사용할 수 있습니다 constexpr.

constexpr int n()
{
    return 10;
}

double a[n()]; // n() is a compile time constant expression

참고 URL : https://stackoverflow.com/questions/15013077/arrayn-vs-array10-initializing-array-with-variable-vs-real-number

반응형