강의

멘토링

커뮤니티

인프런 커뮤니티 질문&답변

JasonChoi님의 프로필 이미지
JasonChoi

작성한 질문수

홍정모의 따라하며 배우는 C++

4.2 전역 변수, 정적 변수, 내부 연결, 외부 연결

45:30 contants 전역 변수들 extern 선언, 정의 관련

해결된 질문

작성

·

360

1

constexpr 변수들도 extern 선언, extern 정의를 따로 분리하는 방법을 적용할 수 없을까요? 

즉, 45:30에 나온 메모리 낭비를 하지않는 전역변수 선언및 정의 방법을

constexpr 전역 변수들로 하고싶은데, 선언과 동시 초기화를 하라고 에러가 뜨네요;;

지금 제가 하고 있는 프로젝트에 배열 선언시 상수를 통한 사이즈 초기화를 해야되서

const 변수가 아닌 constexpr 변수를 써야 하는데(const시 에러뜸)

constexpr 변수들을 "2.9 심볼릭 상수" 에서 나왔던 그대로 헤더파일에 선언과 동시 초기화를 했습니다.

그러나 하나의 constexpr변수에 cpp파일마다  제각각 다른메모리 주소를  가지는 문제가 발생합니다(43:16 부분)

동일한 방법을 적용(45:30) 하려고 했지만 constexpr은 선언과 동시 초기화를 해야되서 에러가 발생합니다.

어떻게 해야 할까요? constexpr 전역변수는 어쩔수 없이 메모리 낭비를 감수 해야 할까요?

enum 을 써서 했더니 되긴하는데, constexpr을 쓰고 싶습니다

세줄 요약하면

1.하나의 헤더파일에 있는 constexpr 전역변수들을 모아두고, 여러 cpp파일에서 #include "constants" 를 통해 상수들을 가져옴

2. 하나의 constexpr 전역변수에, cpp 파일마다 각기 다른 전역변수 주소들을 갖고있는 사태 발생(43:16 부분)

3.constexpr 은 선언과 동시 초기화 해야되서, 45:30에 나온 방법이 안됨, 다른 방법이 있는지?

즉, 2번사태가 나오지 않는 constexpr 전역변수 선언및 정의법이 궁금합니다. 

답변 1

2

홍정모님의 프로필 이미지
홍정모
지식공유자

https://blog.quasardb.net/2016/11/22/demystifying-constexpr

C++ 14부터는 static constexpr도 가능하네요. const는 초기화를 반드시 하셔야 합니다.

어떤 프로젝트를 진행하시는 지는 모르겠습니다만, 요즘에는 변수 한 두개로 메모리 낭비를 고민하지는 않습니다.

JasonChoi님의 프로필 이미지
JasonChoi

작성한 질문수

질문하기