Если у меня есть следующее:
class A {
int foo() const {
j++;
return i;
}
int& foo() {
return i;
}
int i;
mutable int j;
};
тогда, очевидно, что-то вроде
A a;
a.foo() = 5;
вызывает неконстантную версию. Но какие условия должны быть выполнены, чтобы убедиться, что вызов для константной или неконстантной версии для нескольких примеров ...
int i = a.foo(); //I would expect to call the const. Is it guaranteed?
const int j = a.foo(); //Ditto
const int& l = a.foo(); //Ditto
int& k = a.foo(); //I would expect the non-const
foobar(k); //foobar is "void foobar(int)"
return; //but the compiler could potentially decide the const version is fine.