Поиск…


замечания

Что действительно означает «функции-члены-члены» класса. Простое определение, похоже, состоит в том, что функция-член 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