const функция

const функция как метод класса

const в конце функции foo делает функцию foo не способной менять что либо в классе, которому она принадлежит.

Есть в Qt шаблон QMap и есть у класса QMap метод value :

template <class Key, class T>
class QMap
{
......
const T value(const Key &key) const;
.....
}

Вот и получается, что 

class A
{
public:
    A() // default ctor
    {
        ii=0;
        //qDebug("default ctor A() ii=%i",ii);
    }
    A(const A&a) // copy ctor
    {
        ii = a.ii;
        //qDebug("copy ctor A(const A&a) aa.ii=%i",ii);
    }
    A(int ii_) // users ctor
    {
        ii=ii_;
        //qDebug("user ctor A(int %i)",ii);
    }
    ~A()
    {
        //qDebug("dtor A~ ii=%i",ii);
    }

    int ii;
};

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

    QMap< int , A > map;

    map[1] = A(111);
    map[4] = A(444);

    //A &aa4 = map.value(4);        // ошибка  'cannot convert from 'const A' to 'A &'
    const A &aa4 = map.value(4);    // продолжаем, работает ОК

    //aa4.ii =123;                  // ошибка 'ii' cannot be modified because it is being accessed through a const object

    //const_cast<A>(aa4).ii =123;    // так нельзя - cannot convert from 'const A' to 'A' Conversion requires a constructor or user-defined-conversion operator, which can't be used by const_cast or reinterpret_cast

    A &aa3 = const_cast<A&>(map[1]);    // а так можно
    aa3.ii =123;                        // но к сожалению 123 будет у копии map[1] 

,,