c++ enum 스코프 관련
글쓴이: vani2 / 작성시간: 화, 2013/12/03 - 11:40오전
다음 코드를(일부생략)VS2013에서 컴파일하면 잘 되는데 G++(C++11)에서 컴파일 하면 오류가 나네요.
enum AP { A, B, C }; void main(void) { cout << AP::A; // G++에선 오류, VC에선 정상 }
enum에 태그를 달더라도 스코프 지정이 불가능하기 때문에 보완을 위해 C++0x에서 enum class가 나왔다고 알고있는데요,
VC에서 실험해 보았을때 enum class도 아닌데 일반 enum이 스코프 지정이 가능 하네요.
이건 VC가 확장으로 지원하는 기능인가요? 표준은 아니지요?
Forums:
http://www.stroustrup.com/C++
http://www.stroustrup.com/C++11FAQ.html#enum
http://www.cprogramming.com/c++11/c++11-nullptr-strongly-typed-enum-class.html
위 링크에 enum class -- scoped and strongly typed enums에 대해 잘 나오네요.
(C++11 Draft n3337의 7.2장에도 나오지만 읽기에 썩 편하지는 않은 것 같고요..)
예시하신 코드는 표준에 부합되는 문법이 아닌 것 같습니다.
MSVC만의 버그이거나, 확장이거나, 어쩔 수 없이 선택한 고육지책이거나, ... 아니면 뭐라고 부르든...
어쨌든 특정 컴파일러가 느슨한 문법을 허용하더라도 그런 특징에 의존하지 말고
표준에 맞춰 코딩하셔야 포팅할 때도 좋고, 혹시 모를 정체불명의 문제도 피할 수 있습니다.
전에 올리신 http://kldp.org/node/140281 글에 답글 달면서 배운 교훈입니다.
흐음.. 최근에 여러 웹 문서들을 보면 enum보단
흐음..
최근에 여러 웹 문서들을 보면 enum보단 enum class와 underlying_cast()의 사용을 권장하고 있네요.
enum class는 enum처럼 정수타입으로의 바로 변환이 안되니 불편한 점도 있고 한데..
한번 더 검토후 사용해 보아야겠네요.
링크 많은 도움이 되었습니다.
의견 감사드립니다.
그리고 질문에 오류가 있는데
아무래도 정신없이 질문을 쓰다보니 제 코드에 오류가 있는지도 모르고 질문을 작성했네요..
위 코드와 같이 일반 enum에 스코프를 지정해서 사용하는건 VC 뿐 만이 아니라 G++도 됩니다.
혼란을 드려 죄송하네요(ㅜㅜ)
http://www.stroustrup.com/C++
http://www.stroustrup.com/C++11FAQ.html#enum 에 아래의 내용이 나오네요.
질문글의 샘플을 좀 손봐서 빌드해보니, 위 내용대로 결과가 나오고요.
제가 적었던 아래의 말은 틀린 것이고, C++11부터는 표준에 부합하는 코드로군요.
참고자료 링크만 늘어놓고 막상 제대로 확인해 보지도 않고 댓글을 달아 혼란에 일조한 것 같네요.
그렇군요. 다시 한번 확인함에 감사합니다,.
그렇군요.
다시 한번 확인함에 감사합니다,.
댓글 달기