Здравствуйте, rus blood, Вы писали:
A>>Компилятор пытается применить к объекту класса Test оператор []. Но "своего" такого оператора у этого класса нету. Значит нужно попробовать привести объект класса к какому-либо другому типу так, чтобы можно стало применить оператор [].
A>>Так как у класса определен оператор приведения к типу int, рассматривается конструкция
A>>A>>(test.operator int())["test"];
A>>
A>>Она является вполне легальной. Неоднозначности тоже нет — вот и применяется такая конструкция.
RB>... В итоге выражение транслируется в "test"[1], что дает 'е'.
Получается, что выражения 1 и 2 равнозначны, и res1 и res2 равны?
Объясните, почему?
char i = 1;
char res1 = i["test"]; // 1
char res2 = "test"[i]; // 2