operator A()
- пользовательский оператор преобразования. Его задача состоит в том, чтобы возвращать A
по значению при приведении B
к A
.
Ваша operator A()
функция возвращает целочисленное литеральное значение, 10
. Но operator A
должен возвращать A
, поэтому конструктор преобразования A
вызывается со значением 10
. Это приводит к созданию временного A
. Затем вы получаете доступ к .a
для этого временного объекта и вставляете значение .a
в поток, в результате чего вы видите 10
на экране.
EDIT
Когда вики сказал, что оператор разговора «неявно» возвратил A
, это означало, что вам не нужно указывать тип возврата в выражении функции. Это всегда A
, и с этим ничего не поделаешь.
Когда вики сказала, что она "обязательно" вернула A
, это означало, что она не может вернуть ничего, кроме A
. Он даже не может вернуть ничего конвертируемого в A
. Он должен вернуть A
точно.