C++/상수 constexpr 값 이름 앞에 g_ prefix를 붙여도 될까


요약: g_는 mutable 전역 변수에만 쓰자.

C++ 11 에서 새롭게 도입되고 C++14에서 향상된 constexpr 키워드는 컴파일 타임 상수를 의미하며 변수 앞에 적용될 수 있다.

그래서 전역 변수를 쓸 때처럼 constexpr를 정의하면 마치 g_ prefix를 붙여야 할 것 같이 느껴질 수 있다.

하지만 이건 추천하지 않는다.

이건 코딩 스타일/컨벤션의 문제인데, 몇 가지 관점에서 볼 수 있다.

보통 g_는 global variable이라는 의미로 사용된다.

그래서 많은 개발자들이 g_는 변경 가능한 전역 변수 (mutable global state)에만 붙인다고 생각한다.

❓ 그런데 constexpr은?
constexpr은 컴파일 타임 상수이다.
불변 (immutable)이고, 전역 상태의 위험성도 없다.
즉, 일반적인 전역 변수와는 의미가 다르다.

그래서 g_를 붙이면 오히려:
"이 변수는 프로그램 어딘가에서 변경될 수 있는 글로벌 상태인가?"
처럼 오해할 여지가 있다.


만약 프로젝트 컨벤션에서 g_를 mutable 전역 변수에 쓰고 있다면,
constexpr 값에는 안 붙이는 게 좋다.

대신 다음 중 하나를 추천한다.


Show Comments