C++ 상수 정의 할 때 가장 좋은 방법

vani2의 이미지

예를 들어서 Color의 종류를 하나하나 정의해 놓고 싶다고 칩시다.

그렇다면 다음중 어느것을 사용하는 것이 가장 좋을까요?

C++11 이상 버전 기준입니다.

enum
#define
const

enum Color {Red, Blue, Green, ... };

등등..

klara의 이미지

스콧 마이어스의 Effective C++를 읽어보는 걸 추천합니다.

ifree의 이미지

enum class Color { red, blue, green };
Color my_color = Color::red;

vani2의 이미지

이런 선언이 가능한가요?

chanik의 이미지

C++11의 Strongly-typed enum에 해당하는군요.

GCC에서는 4.4 이후부터 -std=c++0x 옵션을 통해 지원되고
(참고: C++0x/C++11 Support in GCC)

$ g++ -std=c++0x sample.cpp

Clang은 2.9 이후부터 -std=c++11 ( 또는, -std=c++0x ) 옵션을 통해 지원됩니다.
(참고: C++98, C++11, and C++14 Support in Clang)

$ clang++ -std=c++11 sample.cpp

내친김에 Visual C++도 찾아보니 VS2012/2013은 지원하고, VS2010은 부분적으로 지원한다고 나오네요.
(참고: C++11 Features (Modern C++))

gilgil의 이미지