멤버함수의 const 위치에 따른 차이점

조한별·2022년 4월 4일
0
#include <iostream>

using namespace std;

class Vector
{
public:
	float x;
	float y;
	float z;

	Vector operator-()
	{
		return Vector{ -x,-y,-z };
	}
	const Vector operator+(const Vector& v) const
	{
		return Vector{ x + v.x, y + v.y, z + v.z };
	}

	void print()
	{
		cout << "x : " << x << " y : " << y << " z : " << z << endl;
	}
};

int main()
{
	Vector v0{ 0, 1, 2 };
	Vector v1{ 1, 2, 3 };

	Vector v2 = v0 + v1;
	Vector v3 = -v1;

	v0.print();
	v1.print();
	v2.print();
	v3.print();
}

위 코드 내에서 Vector 클래스 내의 operator+는 다음과 같은 형식을 띄고 있다.

const Vector operator+(const Vector& v) const

1. 앞의 const
리턴값을 읽기 전용으로 사용하겠다는 의미.
즉, 참조를 하여 값 변형을 막겠다는 의미이다.

2. 매개변수의 const
참조하는 매개변수의 값을 변형하지 않겠다는 의미.

3. 뒤의 const
기본적으로 매개함수는 암묵적으로 this를 참조한다.

void print()

void print(Person* this)

와 같다는 의미이다.

여기서 뒤에 const를 붙히면

void print(const Person* this)

와 같게 된다.
쉽게 말해서 이 함수를 통하여 멤버 변수의 값을 변형하지 않겠다는 의미.

profile
게임프로그래머 지망생

2개의 댓글

comment-user-thumbnail
2022년 4월 5일

블로거님 글 잘 봤습니다. 덕분에 가입도 했어요..

const 키워드를 사용하게 되면

  • 선언하는 변수는 선언과 동시에 값 할당해야 함
  • 읽기만 가능하고 값은 변경할 수 없음
  • 메모리 영역 할당은 다음과 같음
    • 필드 밖에서 선언된 const 키워드 상수는 Data::, data 영역에 저장
    • 필드 안에서 선언된 const 키워드 상수는
      • String의 경우 Data::, data 영역에 저장
      • int, double, float형등의 경우 Stack 영역에 저장
  • const가 많으면 안정적인 코드가 됨
  • const도 해제는 가능하나 위험(객체가 불변해야한다는 의미지 삭제를 못한다는 말은 아니기에)

라고 하네요..

아 아래는 제가 킹 받는 부분을 조금 적어 두었습니다. 글에 반영하면 글이 조금 더 좋아질것 같은데 괜찮으시겠어요?

단락 정렬... 크흠..
실행 결과 이미지... 크흠..

네 여기까지 쓰고 가겠습니다. 열공해서 훌륭한 게임 개발자가 되십셔. 🙄

1개의 답글