수색…


비고

클래스의 'const 멤버 함수'는 실제로 무엇을 의미합니다. 간단한 정의는 const 멤버 함수가 객체를 변경할 수 없다는 것입니다. 그러나 '변할 수 없다'는 것은 실제로 여기서 의미합니다. 이는 단순히 클래스 데이터 멤버에 대한 할당을 수행 할 수 없다는 것을 의미합니다.

그러나 예제에 표시된대로 항목을 맵에 삽입하는 등의 기타 간접 연산을 수행 할 수 있습니다. 이것을 허용하는 것은 const 함수가 객체를 수정하는 것처럼 보일 수 있습니다 (예, 어떤 의미에서 그렇습니다).하지만 허용됩니다.

따라서 진정한 의미는 const 멤버 함수가 클래스 데이터 변수에 대한 할당을 수행 할 수 없다는 것입니다. 그러나 예제에서 설명한 것과 같은 다른 것들을 할 수 있습니다.

상수 멤버 함수

#include <iostream>
#include <map>
#include <string>

using namespace std;

class A {
public:
    map<string, string> * mapOfStrings;
public:
    A() {
        mapOfStrings = new map<string, string>();
    }

    void insertEntry(string const & key, string const & value) const {
        (*mapOfStrings)[key] = value;             // This works? Yes it does. 
        delete mapOfStrings;                      // This also works
        mapOfStrings = new map<string, string>(); // This * does * not work
    }

    void refresh() {
        delete mapOfStrings;
        mapOfStrings = new map<string, string>(); // Works as refresh is non const function
    }

    void getEntry(string const & key) const {
        cout << mapOfStrings->at(key);
    }
};

int main(int argc, char* argv[]) {

    A var;
    var.insertEntry("abc", "abcValue");
    var.getEntry("abc");
    getchar();
    return 0;
}


Modified text is an extract of the original Stack Overflow Documentation
아래 라이선스 CC BY-SA 3.0
와 제휴하지 않음 Stack Overflow