문제

항상 가변 길이 배열이 C ++에서 허용되지 않는다고 생각했습니다 (참조 : Aren 't 가변 길이의 배열은 C ++ 표준의 부분입니다. ).이 코드는 왜이 코드를 컴파일하고 작동합니까?

#include <iostream>
using namespace std;

int main () {

    int n;
    cin >> n;

    int a[n];

    for (int i=0; i<n; i++) {
        a[i] = i;
    }

    for (int i=0; i<n; i++) {
        cout << a[i] << endl;
    }
}
.

도움이 되었습니까?

해결책

현재 C ++ 표준에는 컴파일러 VLAS가 필요하지 않습니다.그러나 컴파일러 공급 업체는 확장자로 VLAS를 지원할 수 있습니다.

VLAS가 C ++ 14에 나타나지 않지만, 제안은 성공하지 못했습니다.그들은 C ++ 17을 위해 돌아올 수 있습니다.

다른 팁

C99는 VLA를 허용하지만 VLA의 성능이 비우호적이기 때문에 C ++는 절대로 허용하지 않습니다.또한 C11에서는 VLA가 선택적 기능이됩니다.

이전에는 VLA가 C ++ 17에 나타나는 것으로 나타납니다.그러나 이제 C ++ 17이 게시되고 VLA가 없습니다.(그리고 그것은 C ++ 20이 VLA가 없을 것 같습니다. 최근 문서는 전혀 그것에 대해 이야기하지 않았습니다.)

표준이 지원되지는 않지만 GNU 컴파일러는 확장자 으로 지원합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top