메서드 뒤에 const 위치
; 해당 메서드가 속해있는 클래스의 멤버 변수를 바꾸지 않겠다는 의미
class A
{
public:
int num = 1;
public:
int getNum() const
{
int a = 1;
a++; // 지역 변수의 변경은 가능
num++; // 클래스의 멤버 변수의 변경은 불가능
return num;
}
};
함수의 매개 변수에 const 위치
; 해당 매개 변수를 함수 내에서 바꾸지 않겠다는 의미
int add(const int a, const int b)
{
return a + b; // 단순 a와 b를 합한 결과를 반환하기 때문에 굳이 const 의미 없음
}
int a = 1;
void increase(int b)
{
b++;
cout << b; // b = 2;
}
increase(a);
cout << a; // a = 1;
// pass by value 방식으로 넘겨받은 인자는 복사값을 사용하기 때문에 원본에 영향을 주지 않음
함수의 매개 변수에 const & 위치
; call by refrence 로 복사의 오버헤드 없이 변수를 참조하고, 해당 매개 변수를 함수 내에서 바꾸지 않겠다는 의미
// 매개 변수는 인자의 참조자가 되기에 메모리 낭비를 줄일 수 있음
// 참조자의 특성상 원래 넘겨받은 데이터의 변경 가능성이 있으므로 const를 사용
int add(const int& a, const int&b)
{
return a + b;
}
int a = 1;
void increase(const int& b)
{
b++; // compile error
}
increase(a); // compile error
함수 앞에 const 위치
; 함수의 반환값을 상수화(바꾸지 않겠다) 하겠다는 의미, 참조자로 받은 매개변수를 함수에서 사용하고 그대로 다시 참조자로 반환할 때
const std::string& getName() const
{
return mName;
}
const A& getClassByIndex(int index) const
{
return array[index]->getClass();
}
'::public > C++' 카테고리의 다른 글
explicit (0) | 2023.07.06 |
---|---|
*개념을 항상 생각하고 정리하자! (0) | 2023.06.22 |
(c++11) lambda (0) | 2023.02.08 |
(C++11) std::move (0) | 2023.01.31 |
(C++11) alignas (0) | 2023.01.18 |