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]
,,