Здравствуйте, Аноним, Вы писали:
А>Вызывается operator int().
А>Почему?
А>А>class Test
А>{
А>public:
А> operator int()
А> {
А> return 1;
А> }
А>};
А>int main()
А>{
А> Test test;
А> test["test"];
А>}
А>
Компилятор пытается применить к объекту класса Test оператор []. Но "своего" такого оператора у этого класса нету. Значит нужно попробовать привести объект класса к какому-либо другому типу так, чтобы можно стало применить оператор [].
Так как у класса определен оператор приведения к типу int, рассматривается конструкция
(test.operator int())["test"];
Она является вполне легальной. Неоднозначности тоже нет — вот и применяется такая конструкция.