[C++] const 제대로 알고 사용하자!: 변수, 포인터, 함수, 파라미터에서 각각 사용되는 const의 의미 파헤치기

2024. 5. 8. 08:00· C, C++
목차
  1. 💋 변수 앞에 const
  2. 💋 const와 포인터
  3. ✔️ const int* ptr
  4. ✔️ int* const ptr
  5. 💋 함수와 const
  6. ✔️ 함수 자체를 const 로 정의
  7. ✔️ 파라미터에서 사용된 const
반응형
반응형

 

 

C++에서 const 키워드는 '상수'라는 뜻이다. 한 번 정해진 값은 바꿀 수 없게 만든다.

const 사용 방법은 몇 가지가 있는데, 위치에 따라 의미가 달라진다.

💋 변수 앞에 const

const int maxCount = 100;

이 코드에서 maxCount는 100이라는 값을 갖고, 이 값은 상수로 선언되어 프로그램 내에서 바꿀 수 없다.

💋 const와 포인터

✔️ const int* ptr

const int* ptr = &maxCount;
  • *ptr 를 변경할 수 없는 것!
  • 포인터 자체가 가리키는 주소 ptr는 변경 가능
  • 포인터가 가리키는 데이터 *ptr는 변경 불가능

ptr은 int의 포인터인데, ptr이 가리키는 값을 바꿀 수 없다. 그래서 ptr = 200; 이런 식으로 값을 변경하려고 하면 컴파일 에러가 난다.

✔️ int* const ptr

int value = 5;
int* const ptr = &value;
  • ptr를 변경할 수 없는 것!
  • 포인터가 가리키는 데이터 *ptr는 변경 가능
  • 포인터 자체가 가리키는 주소 ptr는 변경 불가능

여기서 ptr은 상수 포인터로, ptr이 가리키는 주소는 바꿀 수 없다. 그래서 ptr = &maxCount; 이런 식으로 다른 주소를 가리키게 하려고 하면 컴파일 에러가 난다. 하지만 ptr을 통해 가리키는 값을 변경하는 건 가능하다.

💋 함수와 const

✔️ 함수 자체를 const 로 정의

class MyClass {
public:
   int value;
   int getValue() const {
       return value;
   }
};

여기서 getValue 함수 뒤에 const가 붙어서 이 함수 내에서는 클래스의 어떤 멤버 변수도 변경할 수 없다는 걸 의미한다.

constant functions are not allowed to alter class member data

이렇게 하면 함수가 객체의 상태를 변경하지 않는다는 것을 보장할 수 있다.

실제로도 getValue 함수는 value를 수정할 수 없고, 수정하려고 하면 이런 에러가 나게 된다.

int getDollars() const {
    dollar = -1;
    return dollar;
}

결과는? 컴파일 에러

/Users/gitchan/Projects/gitchan-yonsei/2024-oop/midterm/Examples/Ch8_6.cpp:13:16: error: cannot assign to non-static data member within const member function 'getDollars'
        dollar = -1;
        ~~~~~~ ^
/Users/gitchan/Projects/gitchan-yonsei/2024-oop/midterm/Examples/Ch8_6.cpp:12:9: note: member function 'Money::getDollars' is declared const here
    int getDollars() const {
    ~~~~^~~~~~~~~~~~~~~~~~
1 error generated.

✔️ 파라미터에서 사용된 const

void welcome(const BankAccount &account)
{
        account.output();
}

메서드 파라미터로 const를 사용했다면, 그 함수 내부에서 호출되는 모든 BankAccount 메서드는 const로 정의된 것들이어야만 한다.

 

 

도움이 되었다면, 공감/댓글을 달아주면 깃짱에게 큰 힘이 됩니다!🌟
비밀댓글과 메일을 통해 오는 개인적인 질문은 받지 않고 있습니다. 꼭 공개댓글로 남겨주세요!

 

반응형
저작자표시 비영리 변경금지 (새창열림)

'C, C++' 카테고리의 다른 글

[C++] 연산자 오버로딩 (Operator Overloading): 개념, 구현 방법 (friend function에서, method function에서), 주의사항  (0) 2024.05.10
[C++] static 키워드 제대로 알고 사용하자!: 클래스에서 정적 변수와 정적 함수 사용 방법, 특징, 주의사항  (0) 2024.05.09
[C++] Inline Functions: 인라인 함수 왜 쓰지? 사용 방법과 장단점  (1) 2024.05.07
[C++] 참조(Reference)란?: 참조 vs 포인터 vs 일반변수, 반환 타입으로 참조, & 연산자의 사용방법  (0) 2024.04.29
[C++] 생성자(Constructor)의 개념, 생성자 정의하고 호출하는 다양한 방법들, 생성자 오버로딩, 기본 생성자  (0) 2024.04.24
  1. 💋 변수 앞에 const
  2. 💋 const와 포인터
  3. ✔️ const int* ptr
  4. ✔️ int* const ptr
  5. 💋 함수와 const
  6. ✔️ 함수 자체를 const 로 정의
  7. ✔️ 파라미터에서 사용된 const
'C, C++' 카테고리의 다른 글
  • [C++] 연산자 오버로딩 (Operator Overloading): 개념, 구현 방법 (friend function에서, method function에서), 주의사항
  • [C++] static 키워드 제대로 알고 사용하자!: 클래스에서 정적 변수와 정적 함수 사용 방법, 특징, 주의사항
  • [C++] Inline Functions: 인라인 함수 왜 쓰지? 사용 방법과 장단점
  • [C++] 참조(Reference)란?: 참조 vs 포인터 vs 일반변수, 반환 타입으로 참조, & 연산자의 사용방법
깃짱
깃짱
연새데학교 컴퓨터과학과 & 우아한테크코스 5기 백엔드 스타라이토 깃짱
반응형
깃짱
깃짱코딩
깃짱
전체
오늘
어제
  • 분류 전체보기
    • About. 깃짱
    • Weekly Momentum
      • 2024
    • PROJECT
      • AIGOYA LABS
      • Stamp Crush
      • Sunny Braille
    • 우아한테크코스5기
    • 회고+후기
    • Computer Science
      • Operating System
      • Computer Architecture
      • Network
      • Data Structure
      • Database
      • Algorithm
      • Automata
      • Data Privacy
      • Graphics
      • ETC
    • WEB
      • HTTP
      • Application
    • C, C++
    • JAVA
    • Spring
      • JPA
      • MVC
    • AI
    • MySQL
    • PostgreSQL
    • DevOps
      • AWS
      • 대규모 시스템 설계
    • frontend
      • HTML+CSS
    • NextJS
    • TEST
    • Industrial Engineering
    • Soft Skill
    • TIL
      • 2023
      • 2024
    • Linux
    • Git
    • IntelliJ
    • ETC
      • 日本語

블로그 메뉴

  • 홈
  • 깃허브

인기 글

최근 글

태그

  • Composition
  • TDD
  • 우테코5기
  • Stream
  • 상속
  • 우테코
  • Java
  • 예외
  • 조합
  • 람다
  • 우아한테크코스
  • 함수형프로그래밍
  • OOP
  • 컴포지션
  • lamda
  • 레벨로그
  • 람다와스트림
  • 상속과조합
  • 우아한테크코스5기
  • 스트림
hELLO · Designed By 정상우.v4.2.0
깃짱
[C++] const 제대로 알고 사용하자!: 변수, 포인터, 함수, 파라미터에서 각각 사용되는 const의 의미 파헤치기
상단으로

티스토리툴바

개인정보

  • 티스토리 홈
  • 포럼
  • 로그인

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.