프로그래밍 언어/C++

C++ 함수 선언 끝에 "const"가 의미하는 것

Rateye 2021. 12. 11. 15:40
728x90
반응형
질문 : 함수 선언 끝에 "const"는 무엇을 의미합니까?

다음과 같이 쓰여진 책이 있습니다.

class Foo 
{
public:
    int Bar(int random_arg) const
        {
                // code
                    }
                    };
                    

무슨 뜻이에요?

답변

const 로 표시되는 "const 함수"는이 클래스 함수가 클래스의 멤버 변수를 변경하는 것을 컴파일러 오류로 만듭니다. 그러나 함수 내부에서 클래스 변수를 읽는 것은 괜찮지 만이 함수 내부에 쓰면 컴파일러 오류가 발생합니다.

이러한 "const function"에 대해 생각하는 또 다른 방법은 암시 적 this 포인터를 사용하는 일반 함수로 클래스 함수를 보는 것입니다. 따라서 int Foo::Bar(int random_arg) 메서드 (끝에 const int Foo_Bar(Foo* this, int random_arg) Foo f; f.Bar(4) 와 같은 호출을 생성합니다. Foo f; f.Bar(4) Foo f; Foo_Bar(&f, 4) 와 같은 것에 대응합니다. Foo f; Foo_Bar(&f, 4) . 이제 끝에 const를 추가하면 ( int Foo::Bar(int random_arg) const ) const this 포인터가있는 선언으로 이해할 수 있습니다. int Foo_Bar(const Foo* this, int random_arg) . this 경우의 유형은 const이므로 멤버 변수를 수정할 수 없습니다.

함수가 클래스의 변수에 쓸 수 없도록하는 "const function"제한을 완화 할 수 있습니다. 함수가 "const function"으로 표시된 경우에도 일부 변수를 쓸 수 있도록하기 위해 이러한 클래스 변수는 mutable 키워드로 표시됩니다. 따라서 클래스 변수가 변경 가능한 것으로 표시되고 "const 함수"가이 변수에 쓰면 코드가 깔끔하게 컴파일되고 변수가 변경 될 수 있습니다. (C ++ 11)

const 키워드를 다룰 때 평소와 같이 C ++ 문에서 const 키워드의 위치를 변경하는 것은 완전히 다른 의미를 갖습니다. 위의 const 사용법은 괄호 뒤의 함수 선언 끝에 const 를 추가 할 때만 적용됩니다.

const 는 C ++에서 과도하게 사용되는 한정자입니다. 구문과 순서는 포인터와 함께 사용하면 종종 간단하지 않습니다. const 정확성 및 const 키워드에 대한 일부 읽기 :

Const 정확성

C ++ 'const'선언 : 이유와 방법

출처 : https://stackoverflow.com/questions/3141087/what-is-meant-with-const-at-end-of-function-declaration
728x90
반응형