함수 내에서 사용 정수 상수를 정의하는 일반적인 방법은 다음C++ 코드에서 하나의 상수를 정의하기 위해 enum을 사용해야하는 이유가 있습니까?
const int NumbeOfElements = 10;
클래스 내에서 사용하기위한 동일한 :
class Class {
...
static const int NumberOfElements = 10;
};
그것은 다음 고정 크기 어레이로서 사용될 수있다 bound는 컴파일 타임에 알려진 것을 의미합니다.
오래 전에 컴파일러는 후자의 구문을 지원하지 않았고 그 열거 형이 사용 된 이유는 다음과 같습니다
enum NumberOfElementsEnum { NumberOfElements = 10; }
지금 거의 모든 널리 사용되는 컴파일러 지원과 함께 모두가에서 기능 const int
과는 동급 static const int
구문은
흠, gcc는 -pedantic -Wall -Wextra를 사용해도이 점에 대해 불평하지 않습니다. 어쨌든 링크 시간까지 오류를 감지 할 수 없기 때문에 짐작할 수 있습니다. 이식성이없는 코드를 진단하려고 시도하는 것을 포기합니다. –
좋은 답변입니다. 명시 적으로 언급하지 않은 또 다른 좋은 점은 열거 형은 rvalue이므로 저장소가 할당되지 않는다는 것입니다. 템플릿 메타 프로그래밍을하고 많은 수의 클래스 템플릿을 인스턴스화하는 경우 컴파일러 최적화에 의존하기보다는 * 확실하게 알 수 있습니다. – jalf
클래스의 외부에'static const int '에 대한 정의가 없다면, 그 클래스에 할당 된 스토리지가 없습니다. 또한 rvalues는 저장소를 할당 할 수 있습니다 (예 : 임시 저장소는 rvalues이고 저장소는 확실히 사용합니다). –