const 키워드

2019. 8. 21. 17:43PL/C++

컴파일러 해석이 불분명하기 때문에 const 키워드가 생겼다. 컴파일러는 const 객체의 멤버함수 내용이 객체에게 변화를 주는지 아닌지 모른다. 따라서 함수 뒤에 const 키워드를 통해서 const 객체도 사용할 수 있게 만들 수 있다.

 

const를 붙인다한들 함수 내부에서 멤버변수를 바꾸는 코드가 보인다면 컴파일러가 막아버린다

 

// rhs는 const 선언 객체지만, const 키워드를 통해서 real, imag 함수를 불러올 수 있다

std::ostream& operator << (std::ostream &out, const Complex &rhs){
	out << "(" << rhs.real() << ", " << rhs.imag() << "i)";	
	return out;
}

Complex::Complex(double re, double im){
	this->re = re;
	this->im = im;
}

Complex::Complex(const Complex &rhs){
	this->re = rhs.re;
	this->im = rhs.im;
}

double Complex::real() const{
	return this->re;
}

double Complex::imag() const{
	return this->im;
}

 

매개변수에 const를 붙이는 이유는 임시객체 때문이다. 임시객체를 참조하기 위해서는, 임시객체가 상수이기 때문에 반드시 참조연산자 앞에 const를 붙여야만 한다

 

const int &ref= 10;	// const를 붙이면 상수를 참조할 수 있다. 컴파일 에러는 발생 X

class Tmp {
private:
	int num;
    
public:
	Tmp(int n) : num(n) {}
};

int main(void) {
	const Tmp &cref = Tmp(10); // const를 붙이면 임시객체를 참조할 수 있다 
    return 0;
}

 

 

'PL > C++' 카테고리의 다른 글

전위연산자와 후위연산자의 연산자 오버로딩  (0) 2019.08.22
클래스의 static 변수  (0) 2019.08.22
임시객체  (0) 2019.08.21
복사 생성자를 정의해야 하는 이유  (0) 2019.08.21
디폴트 생성자가 사라지는 경우  (0) 2019.08.21