일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- 홍혜걸
- 폰폰테스트
- 불가피
- 리리남매
- 조희연
- 스콜피온킹
- 미국 금리인하
- 김재석
- libtins
- 임영규
- 김영권 아내
- 최강욱
- 학교 개학 연기 4월
- 이태원 클라쓰 15회 예고
- 스페인 코로나
- 성남 코로나 확진자
- 이지혜
- 제넥신
- 해킹
- 이상형 만들기
- 고민정
- 픽크루
- 성남은혜의강교회
- 김영권
- 뭉쳐야 찬다
- 유튜버 김재석
- 은혜의 강 교회
- 양적완화
- 금리인하
- 킹덤 고근희
- Today
- Total
Dork's port
Class function과 const 본문
안녕하세요.
Qt Creator를 사용하여 Class에서 Refactor로 Getter, Setter를 설정하면 아래의 함수와 같이 const가 붙는 경우가 있습니다.
uint32_t Server::getTunIP() const { return tunIP; }
위와 같은 코드에서 const가 붙는 경우 그 의미를 제대로 알지 않고 Refator에서 Getter, Setter에서 만들어준대로 사용하다, 문득 그 의미가 궁금해져 검색을 해 보았습니다.
뒤의 const의 의미는 해당 함수 내에서 Class함수의 변수(멤버)를 변경 할 수 없다는 것을 뜻합니다.
위의 코드를 포함하는 Class에서 tmp라는 변수가 있다고 가정 할 때에 다음과 같은 코드는 컴파일시 에러가 발생합니다.
uint32_t Server::getTunIP() const { tmp=248; return tunIP; }
위와 같이 const가 붙은 함수 내에서 tmp라는 변수를 임의의 값(248)로 초기화 하려고 할 때에 에러가 발생하게됩니다.
또는, 아래와 같이 Return Value에 const가 있는 경우가 있습니다.
const uint32_t Server::getTunIP() { return tunIP; }
함수의 Return값에 const가 붙은 경우 해당 리턴 값을 변경하지 못한 다는 것을 뜻합니다.
그러나, 위와 같이 Return 값에 const가 붙은 경우 레퍼런스(&)에 리턴 값을 저장 하지 않는 이상 const의 의미는 무색해집니다.
아래 소스코드처럼 컴파일시에 차이가 있습니다.(tmp는 const형으로 선언 된 변수가 아닐 뿐더러, 8번째 행에서는 값 복사가 일어나므로, 9번째에서 아무런 에러도 발생하지 않는 것 입니다.
int main() { uint32_t& ref=class.getTunIP(); ref=4; //occurred an error uint32_t tmp=class.getTunIP(); tmp=4; //Success to Compile return 0; }
코딩을 할수록 Secure Coding의 중요성을 깨닫게 되네요.
질문은 댓글로 받도록 하겠습니다.
'Develop' 카테고리의 다른 글
[C++] 802.11(wireless) 라이브러리 사용하기 (tins Library 사용하기) (0) | 2017.11.20 |
---|---|
[C++] MAC Address 저장하기 (0) | 2017.11.02 |
C++ Console 특정 부분 재 출력하기(Console clear, Console up line, Cosole up prompt) (0) | 2017.10.21 |
아스키 코드표 (2) | 2017.10.19 |
Pcap Library를 이용한 Packet Capture (0) | 2017.10.18 |