const 키워드
2019. 8. 21. 17:43ㆍPL/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 |