본문 바로가기
::public/C++

const 위치에 따른 의미

by 해맑은욱 2023. 7. 5.

메서드 뒤에 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