C++의 Const 멤버 함수

Muhammad Husnain 2023년10월12일
C++의 Const 멤버 함수

이 기사는 C++에서 상수 멤버 함수의 사용에 관한 것입니다. 객체, 변수 또는 함수를 상수로 만들기 위해 const 키워드를 사용합니다.

다른 변수나 객체와 마찬가지로 클래스의 멤버 함수도 const로 만들 수 있습니다. 이러한 기능에 대한 특정 규칙과 규정은 이 기사에서 논의될 것입니다.

C++의 Const 멤버 함수

Const는 데이터가 읽기 전용임을 나타내는 데이터 유형과 함께 사용되는 키워드인 유형 한정자입니다. 상수를 선언하는 데 사용할 수 있지만 Const는 유형의 일부라는 점에서 다른 언어의 유사한 구성과 다르므로 포인터, 참조, 복합 데이터 유형 및 유형 검사와 짝을 이룰 때 복잡한 동작이 있습니다.

Const 멤버 함수는 프로그램에서 상수로 선언됩니다. 이러한 함수에서 참조하는 개체는 변경할 수 없습니다.

의도하지 않은 개체 변경을 방지하려면 const 키워드를 사용하는 것이 좋습니다. 모든 개체는 const 멤버 함수를 호출할 수 있습니다.

non-const 개체만 non-const 기능을 호출할 수 있습니다. 클래스의 개체를 const 개체로 선언하면 const 멤버 함수만 호출할 수 있는 반면 non-const 개체는 모든 멤버 함수 const 또는 non-const를 호출할 수 있습니다.

const 함수를 만드는 구문은 다음과 같습니다.

return -datatype function_name() const;

아래의 예를 고려하십시오.

#include <iostream>
using namespace std;
class Data {
  int val;

 public:
  Data(int a = 0) { val = a; }
  int getValue() const { return val; }
};
int main() {
  Data d(10);
  cout << d.getValue();
  return 0;
}

이 코드 세그먼트에서 생성자와 멤버 함수 getValue()를 사용하여 Data 클래스를 선언했습니다. 이 함수는 const 함수이므로 데이터 멤버의 값을 변경할 수 없습니다.

데이터 멤버의 데이터를 수정하는 경우 컴파일러는 오류를 생성합니다. 이 함수의 this 포인터는 const 멤버 함수에 제공된 const 개체에 대한 포인터입니다.

이렇게 하면 포인터를 사용하여 개체의 데이터 멤버를 수정할 수 없습니다. 상수 메서드라고 하는 개체의 데이터 멤버를 수정하려는 모든 노력과 해당 개체에 대한 비 const 멤버 함수를 호출하려는 모든 시도는 구문 오류를 발생시킵니다.

상수 멤버 함수에는 상수가 아닌 버전이 오버로드될 수 있습니다. 컴파일러는 const 개체 또는 non-const 개체에 의해 호출되는지 여부에 따라 사용할 버전을 결정합니다.

Const 생성자와 소멸자는 선언할 수 없습니다. 개체 자체가 일정하더라도 항상 데이터 멤버를 변경할 수 있습니다.

정적 멤버 함수는 const로 정의할 수 없습니다. const 키워드는 멤버 함수에 제공되는 this 포인터 참조에 영향을 주지만 정적 멤버 함수는 개체 없이 호출할 수 있으므로 참조가 없습니다.

함수가 클래스 변수에 쓰지 못하도록 하는 const 함수 제한을 완화하는 것도 가능합니다. 이러한 클래스 변수는 mutable 키워드로 표시되어 함수가 const 기능으로 표시된 경우에도 쓰기 가능하도록 허용합니다.

클래스 변수가 mutable로 표시되고 const 함수가 이에 쓰는 경우 코드가 올바르게 컴파일되고 변수를 변경할 수 있습니다(C++11).

C++ 문에서 const 키워드의 배치를 변경하는 것은 const 키워드로 작업할 때 일반적으로 그렇듯이 완전히 다른 의미를 갖습니다. 앞의 const 사용법은 const가 괄호 뒤의 함수 선언 끝에 배치되는 경우에만 적용됩니다.

Muhammad Husnain avatar Muhammad Husnain avatar

Husnain is a professional Software Engineer and a researcher who loves to learn, build, write, and teach. Having worked various jobs in the IT industry, he especially enjoys finding ways to express complex ideas in simple ways through his content. In his free time, Husnain unwinds by thinking about tech fiction to solve problems around him.

LinkedIn