Бьерн Страуструп - Абстракция данных в языке С++ - Ссылки и преобразования типов

ОГЛАВЛЕНИЕ

 

        Ссылки и преобразования типов

    Преобразования, определенные для некоторого класса,
  применяются также и к ссылкам. Рассмотрим класс s t r i n g ,
  в котором присваивание простой символьной строки не определено,
  но есть конструктор для получения объекта s t r i n g из
  символьной строки :

      class string { 
            ...
                  string (char *);
            void operator=(string &);
      };
      string s = "asdf";

      Присваивание

      s = "ghjk";  

  законно и будет иметь желаемый эффект. Оно интерпретируется как

             s.operator=((temp.string("ghjk"), &temp)) 

  где t e m p - временная переменная типа s t r i n g .
  Применение конструкторов до взятия адреса, как этого требует
  семантика ссылок, обеспечивает то, что для переменных ссылочного
  типа выразительная мощь, предоставляемая конструкторами, не будет
  теряться. Другими словами, множество значений, допустимое для
  функции, ожидающей аргумент типа Т, то же самое, что и допустимое
  для функции, ожидающей аргумент типа Т& (ссылку на Т).