버그 해결을 위한 모든 질문을 던져
+1 vote
351 views
이팩티브 c++ 보는 와중에 define 쓰지말고 const 쓰면 장점으로 두가지가 써져 있는데

심볼 테이블로 인한 디버그 관련 장점하고 사본이 하나만 만들어진다 인데

제가 이해하고 있는 것을 체크 받고 싶습니다.

우선 첫 번쨰가 심볼 테이블인데
이건 컴파일시에 코드 생성을 위해 사용 되는거지 exe 뒤로는 존재하지 않는게 맞나요?
 

두 번쨰로 사본을 하나만 만든다는 부분인데

우선 이게 전역 기준인거 같은데 맞겠죠?
지역이나 클래스인 경우에는 const는 스택에 생성 될 거라고 생각 되고

말만 보면 사본 하나만 만들어진다는게 꼭 static 변수처럼 이해가 되는데 정확히 어떻게 된다는 의미인가요?

사본 하나만 만들어 진다면 static const가 존재 할 필요가 없을거라고 생각이 됩니다.
asked (10 point) , 351 views

1 답변

+3 votes

빌드 타임에 생성되는 const가 있고 실행 타임에 생성되는 const가 있는걸로 압니다...

const int a =30 ; 과 같은것들이 빌드 타임이고 const int a = b; 가 실행타임입니다.

vs기준으로 빌드 타임에 생성되는 벨류에 한해서 int array[a] 가 허용 되고

또한 빌드 타임에 생성되는 const 에 한해서 같은 값이면 심볼이 하나만 존재 할것이라고 유추 할수 있을거 같습니다.

static const 의 경우 무조건 빌드 타임이 될거 같은 느낌이 드는데요.. 

심볼테이블은 나중에 크래쉬 났을때 보겟져.

wink

answered (33 point)

사족을 더하자면 빌드 타임 const라는 것을 확실히 하고 싶을때는 const대신 constexpr을 써도 됩니다

 

전체적인 맥락에서 좋은 답변인것 같습니다. 다만 내용에 오류가 있는 것 같아서 첨언합니다.
static const의 경우에도 초기값이 무엇이냐에 따라서 실행시간에 값이 결정될 수 있습니다.
실제로 아래와 같은 코드를 작성하면 static const로 선어된 값이 실행시간에 결정되는 것을 확인할 수 있습니다.

static const int x = rand();

 

버그 해결을 위해 도움을 구하고, 도움을 주세요. 우리는 그렇게 발전합니다.

throw bug 는 프로그래밍에 대한 전분야를 다룹니다. 질문,논의거리,팁,정보공유 모든 것이 가능합니다. 프로그래밍과 관련이 없는 내용은 환영받지 못합니다.

96 질문
186 answers
194 댓글
211 users