Определенные пользователем преобразования в C ++

Недавно я просматривал мою копиюC ++ Pocket Reference от O'Reilly Media, и я был удивлен, когда наткнулся на короткий раздел и пример, касающийся пользовательского преобразования для пользовательских типов:

#include <iostream>

class account {

    private:
        double balance;

    public:
        account (double b) { balance = b; }

        operator double (void) { return balance; }
};

int main (void) {

    account acc(100.0);
    double balance = acc;

    std::cout << balance << std::endl;

    return 0;
}

Я некоторое время программировал на C ++, и это первый раз, когда я видел такую ​​перегрузку операторов. Описание этой темы в книге несколько кратко, и у меня остается несколько вопросов без ответа об этой функции:

Это особенно неясная особенность? Как я уже сказал, я некоторое время программировал на C ++, и это первый раз, когда я сталкивался с этим. Мне не повезло найти более подробный материал по этому вопросу.Это относительно портативно? (Я собираю на GCC 4.1)

Можно ли выполнить пользовательские преобразования в пользовательские типы? например

оператор std :: string () {/ * code * /}

Ответы на вопрос(1)

Ваш ответ на вопрос