サーチ…


備考

クラスの '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