에서 오는, C++로 점프 해요
가하는 const
실제로하지 않은 #define
반대 ('enum
, 일정 D 조, 또는 리터럴)이 아니라 한 번 설정하면 읽기 전용입니다. 즉, 내가 할 수 있습니다
const int x = rand();
하고 괜찮아요 - 포인트가 x
런타임 때까지 알 수없는 것. 따라서 나는 할 수 없다.
int arr[x]; // error - x is not a compile-time constant
그런 다음 C 표준 (99?) 중 하나가 계속되어 가변 길이 배열이 허용된다. C에서 ANSI 표준에 대해 일반적으로 코드를 작성했지만 실제로 C++ 11을 픽업하려고 할 때 실제로 영향을 미쳤습니다.
내가 아는 한, C++은 가변 길이 배열을 허용하지 않습니다. 그러나 많은 컴파일러에서는이를 확장 (GCC?)으로 허용합니다. 문제는 C++ 11을 배우려고 할 때, 코딩하는 코드가 유효한 C++인지 또는 C99 호환으로 확장 된 C++인지 알 수 없기 때문입니다. 예 :
std::default_random_engine e{};
std::uniform_int_distribution<int> d{};
const int x{d(e)};
int arr[x]; // compiles
유효한 C++인지 여부를 알 수 없습니다. 분명히 x
의 값은 런타임까지 알 수 없습니다. C와 C++의 차이를 이해하지 못할 수도 있습니다. const
?
유효하지 않습니다. '-std = ...'플래그를 사용하십시오.'... '는 표준입니다. 'C++ 11' 또는'C++ 98'. – juanchopanza
당신은 또한'-pedantic'을 사용할 수도 있습니다 – Jarod42
@juanchopanza 저는'-std = C++ 11'을 사용하여 실제로 컴파일했고 아무런 경고도 내지 않았습니다. Shafik이'-pedantic' 플래그를 사용하면 경고 팝업이 나타납니다! – zac