minjeong-oh
기록
minjeong-oh
전체 방문자
오늘
어제
  • 분류 전체보기 (207)
    • ML & Neural Net (3)
    • ◼️GNN (1)
    • ◼️시계열 (1)
    • ◼️추천시스템 (0)
    • ◼️수학 (3)
    • Data Engineer (2)
    • ◼️Spark (1)
    • ◼️Kafka (1)
    • ◼️Elestic Search (0)
    • ◼️Redis (0)
    • ◼️ClickHouse (1)
    • Programming Language (4)
    • ◼️Git (1)
    • ◼️Python (1)
    • ◼️C++ (33)
    • ◼️Fortran 99 (2)
    • ◼️OpenGL (7)
    • ◼️MFC (35)
    • ◼️Flutter (46)
    • ◼️Kotlin (1)
    • ◼️Android (1)
    • ◼️Java (1)
    • ◼️C (4)
    • Development (0)
    • ◼️디자인패턴 (0)
    • ◼️네트워크 (2)
    • ◼️인증 (1)
    • Computer Science (4)
    • 알고리즘 문제풀이 (12)
    • SQL 고득점 Kit 문제풀이 (8)
    • 취업준비 (0)
    • Notion 정리 글 (1)
    • Article Scrap (3)
      • Careerly - Q&A (7)
      • Careerly - Post (2)
    • 기타 등등 (16)

블로그 메뉴

  • 글쓰기
  • 홈
  • 태그
  • 방명록
  • 편집

공지사항

인기 글

태그

  • 티스토리폰트배경색없애기
  • GSLB
  • OpenGL회전
  • 리눅스파티션
  • AI배워야하나
  • 구조체매개변수
  • SpringBootSwagger
  • kafka구축
  • 인공지능개발자
  • API문서정리
  • mfc
  • 이것이C++이다책참고
  • 그램풀스팩업그레이드
  • hello테마
  • NextJSSwagger
  • 19년식그램램장착
  • 구조체배열포인터
  • 19년식그램SSD장착
  • 이차원구조체배열포인터
  • 그램업그레이드

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
minjeong-oh

기록

◼️C++

[C++] 상수형 메서드, mutable, const_cast< >

2023. 9. 17. 22:37

상수형 메서드

- 멤버변수에 읽기 접근은 가능하지만 쓰기는 허용되지 않는 메서드.

- 원형 뒤에 const예약어만 붙이면된다.

- 값을 변경하지 않는다는 안정성을 준다.

- 할 수만 있다면 '최선을 다해' const를 사용하기 바란다.

int GetData() const
{
  return m_nData;
}

 

상수형 메서드에서 쓰기연산을 실행할 경우

class CTest
{
public:
  
  int GetData() const
  {
    SetData(20);  // 상수화된 메서드가 아니기 때문에 호출할 수 없다. 오류 발생.
    m_nData = 20;  //대입연산자 사용 불가능.
    
    return m_nData;
  }
  int SetData(int nParam) {m_nData = nParam;}

 

개발자 마인드

정말 실력있는 C++프로그래머는 const를 제대로 사용할 줄 안다.
소스 코드에서 const 예약어의 개수만 세어봐도 작성자의 수준을 가늠할 수 있다.
const는 안전장치이자 배려이다. 

 

 

 

상수형 메서드에서 쓰기가 허용되는 mutable예약어, const_cast< >

 

mutable 로 선언한 멤버 변수의 값은 상수형 메서드에서도 쓰기가 허용된다.

class CTest
{
public:
  int GetData() const
  {
    //상수형 메서드라도 mutable 멤버 변수에는 값을 쓸 수 있다.
    m_nData = 20;
    return m_nData;
  }

private:
  mutable int m_nData;
}

 

const_cast<>는 형변환 연산자로 상수형을 제거한 형변환을 할 수 있다.  

문법: const_cast<새형식>(대상)

void TestFunc(const int &nParam)
{
  //상수형 참조였으나 일반 참조로 형변환.
  int &nNewParam = const_cast<int &>(nParam);
  
  nNesParam = 20;  //쓰기가 가능해진다.
}

int main(){
  int nData = 10;
  TestFunc(10);  //상수형 참조로 전달된다. 내부에서 형변환을 통해 값을 변경가능하게 한다.
  
  cout << nData << endl;
  return 0;
}

 

개발자 주의사항

mutalble이든 const_cast든 어쩔 수 없는 (미래의) 어느 경우 를 위한 것이니 결코 현재를 위한 것이 아니라는 사실이다. 그러니 사용에 신중에 신중을 기하기 바랍니다.

 

더보기
 

Visual Studio C++ 사전

c++ 공부 내용을 지속해서 추가하는 게시글입니다. 참고 책 Part1. C에서 C++로 문법 전환하기 Chap1. C와는 다른 C++ [C++] Hello world 출력해보기 [C++] 여러 변수 출력하기 [C++] Visual Studio 에서 추가로 사용

genius-duck-coding-story.tistory.com

 

 

 

'◼️C++' 카테고리의 다른 글

[C++] 클래스의 정적멤버 (static)  (0) 2023.09.17
[C++] delete 예약어를 이용한 명시적 메서드 삭제  (0) 2023.09.17
[C++] 클래스 요구사항에 맞게 코드 구현하기  (0) 2023.09.17
[C++] 메서드, this 포인터  (0) 2023.09.17
[C++] 명시적 디폴트 생성자  (0) 2023.09.17

    티스토리툴바