C++는 가변 길이 배열(VLA)을 지원하지 않습니다
C++ 표준은 가변 길이 배열(Variable Length Array, VLA)을 공식적으로 지원하지 않습니다. C++11 표준에서도 배열의 크기는 반드시 상수 표현식(constant-expression)으로 지정해야 한다고 명시하고 있습니다.
즉, 배열의 크기를 런타임에 결정되는 변수 값으로 지정하면 컴파일 오류가 발생합니다.
작동하지 않는 코드 예제
void displayArray(int n) {
int arr[n]; // 컴파일 오류 발생
// ......
}
int main() {
displayArray(7);
}위 코드에서 int arr[n]처럼 변수 n을 배열 크기로 사용하면 g++, clang++ 등 대부분의 C++ 컴파일러에서 오류를 반환합니다. 이는 C99 이후 가변 길이 배열을 허용하는 C 언어와의 중요한 차이점 중 하나입니다.
가변 길이 배열의 대안
런타임에 크기가 결정되는 배열이 필요하다면 다음과 같은 방법을 사용하는 것이 좋습니다.
- std::vector: 크기를 동적으로 조절할 수 있는 표준 컨테이너로, 가장 권장되는 방식입니다.
- 동적 할당(new / delete[]): new 연산자로 힙 메모리에 배열을 할당하고, 사용 후 반드시 delete[]로 해제해야 합니다.
- std::unique_ptr: 동적으로 할당된 배열을 스마트 포인터로 관리하면 메모리 누수를 방지할 수 있습니다.
결론적으로, C++에서 가변 길이 배열은 표준 기능이 아니므로 std::vector와 같은 컨테이너를 활용하는 것이 안전하고 바람직한 접근 방식입니다.