const 변수는 선언과 동시에 초기화 되지않으면안되는걸로 아는데왜 저 FruitSeller클래스내에APPLE_PRICE멤버는 const선언되어 있는데왜 초기화 안하나요??- dc official App
책에 다 써있네용 - dc App
선언과 동시에 초기화 해야한다 써놓고 저기서는 초기화 하지않은 이유에대해선 안나와있어서요
const 멤버변수도 Initializer를 사용하면 초기화 가능하다! 라고 써있어요
선언과 동시에 초기화 해야한다고 되어있는데 선언만 하고있는데 왜그런가요?
밑에 생성자(Initializer)에서 초기화하고 있어요
이것은 클래스멤버에서만 허용되는건가요?? 원래 그냥 일반 지역변수로서 const num; 선언만하고 초기화하지않으면 에러가 나는걸로 알고있어서요
위와 같이 생성자가 커스텀으로 짜여져 있으면 기본 생성자가 자동으로 생성이 안됨. 따라서 바깥쪽에서 해당 타입의 인스턴스를 만든다고 해도 위에 짜여진 생성자만으로 객체를 생성할 수 있게 됨. 그래서 항상 const 값이 의미있는 값으로 채워지니까 에러는 안나겠죠
야 요즘 C++에서 그런거 너무 따지지마라, 요즘 C++그냥 하도 바뀌어서 컴파일러 지좆대로 내로남불이여, 썡까 걍 되면 되는거고 안되면 안되는거고
책보니까 그 윗줄에 "이니셜라이저를 이용하면 선언과 동시에 초기화가 이뤄지는형태로 바이너리 코드가 생성된다" 라고 써있네요
그말은 이해가 가는데 일단7번줄을 보면 초기화가 안되어있고 선언만 되어있길래요 원래 const 변수는 선언되자마자 초기화 되어야 하는걸로 알아서요
c 코드상에선 그래보이지만 결국 컴파일한 바이너리코드에서는 선언과 초기화가 동시에 이뤄지는형태로 된다는 말 아닌가요.
그렇군요
const int APPLE_PRICE = 10; 처럼 선언과 초기화를 동시에 하면 상관없는데, 생성자에서 초기화를 하고 싶은데 reference 타입이나 const 타입은 생성자 블록에서 초기화할 수 없으니까 초기화 리스트에서 초기화하는거임
객체의 멤버변수니까 생성자에서 초기화하고 싶은 경우엔, 생성자의 {} 블록에서 const 타입 멤버변수를 초기화하려고 하면 이미 쓰레기 값이 할당된 상태라 다른 값을 할당하는 게 돼서 컴파일 에러가 발생함. 그래서 초기화 리스트에서 초기화
11부터 클래스 생성자에서 초기화 가능하게 바뀐걸로 기억해요
아 static이 아닌게 생성자에서 초기화 가능하게 바뀐거였나 기억이 잘..
이것보다 메모리 레이아웃 먼저
https://youtu.be/9SlwbUHqjd4