The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]




Версия для распечатки Пред. тема | След. тема
Новые ответы [ Отслеживать ]
ссылки в с++, !*! rasmon, 13-Дек-08, 18:11  [смотреть все]
У Страуструпа в его книге "язык программирования с++" есть такие слова (в главе о функциях):
Разрешение преобразования для аргумента (функции) типа const T& обеспечивает гарантию того, что аргументу будет присвоен тот же набор значений, что и аргументу типа T.
Так что -  тип "ссылка на постоянный объект" законно может быть приведена к типу "ссылка на объект"?
  • ссылки в с++, !*! const, 23:34 , 13-Дек-08 (1)
    >Так что -  тип "ссылка на постоянный объект" законно может быть приведена к типу "ссылка на объект"?

    Цитата довольно заковыристая... На самом деле, при вызове функции const T& и T автоматически приводятся друг к другу. Про T& ничего не было сказано.
    Например:

    void f(const int &x) { g(x); }
    void g(int y) { f(y); }
    int main() { g(42); }

    • ссылки в с++, !*! rasmon, 16:37 , 16-Дек-08 (2)
      >>Так что -  тип "ссылка на постоянный объект" законно может быть приведена к типу "ссылка на объект"?
      >
      >Цитата довольно заковыристая... На самом деле, при вызове функции const T& и
      >T автоматически приводятся друг к другу.

      Cогласен - заковыристая. И у Струструпа таких мест много. И хотя в некоторых местах можно разобраться по прилагаемым примерам, то тут непонятно. Это находится в главе "функции", часть "передача аргументов":

      void update(float& i);
      void g(double d){
      update(d); //ошибка. И только потому, что это не то что хотел программист. Самим языком //это как бы не запрещено,
      }

      но:
      float qrt(const float&);
      void g(double d){
      qrt(d); //а так можно - почему?
      }

      И там  же находится вышеприведенная цитата.

      • ссылки в с++, !*! vic, 16:44 , 16-Дек-08 (3)
        >void update(float& i);
        >void g(double d){
        >update(d); //ошибка. И только потому, что это не то что хотел программист.
        >но:
        >float qrt(const float&);
        >void g(double d){
        >qrt(d); //а так можно - почему?

        причина в преобразовании типов :)

        • ссылки в с++, !*! rasmon, 16:53 , 16-Дек-08 (4)
          >>void update(float& i);
          >>void g(double d){
          >>update(d); //ошибка. И только потому, что это не то что хотел программист.
          >>но:
          >>float qrt(const float&);
          >>void g(double d){
          >>qrt(d); //а так можно - почему?
          >
          >причина в преобразовании типов :)

          дык вот почему здесь double можно преобразовывать в const float& , когда double во float&
          нельзя? Почему нельзя - я понял. Но почему по той же причине не запрещено преобразование дабла в ссылку на постоянный флоат?

          • ссылки в с++, !*! vic, 18:23 , 16-Дек-08 (5)
            >[оверквотинг удален]
            >>>float qrt(const float&);
            >>>void g(double d){
            >>>qrt(d); //а так можно - почему?
            >>
            >>причина в преобразовании типов :)
            >
            >дык вот почему здесь double можно преобразовывать в const float& , когда
            >double во float&
            > нельзя? Почему нельзя - я понял. Но почему по той же
            >причине не запрещено преобразование дабла в ссылку на постоянный флоат?

            можно ли изменять временный объект? :)

          • ссылки в с++, !*! const86, 10:56 , 19-Дек-08 (7)
            >дык вот почему здесь double можно преобразовывать в const float& , когда double во float& нельзя? Почему нельзя - я понял. Но почему по той же причине не запрещено преобразование дабла в ссылку на постоянный флоат?

            Первое нельзя, потому что у нас есть double и мы хотим передать в функцию ссылку на него как ссылку на float. Функция по этой ссылке что-нибудь запишет и что мы получим?
            А во втором случае ссылка константная, поэтому функция туда ничего писать не будет. Мы можем создать временный float, присвоить ему значение нашего double и передать в функцию ссылку на float.




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру