- ссылки в с++, 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& > нельзя? Почему нельзя - я понял. Но почему по той же >причине не запрещено преобразование дабла в ссылку на постоянный флоат? можно ли изменять временный объект? :)
- ссылки в с++, rasmon, 18:54 , 16-Дек-08 (6)
>можно ли изменять временный объект? :) можно ответить "да", а можно и "нет".
- ссылки в с++, const86, 10:56 , 19-Дек-08 (7)
>дык вот почему здесь double можно преобразовывать в const float& , когда double во float& нельзя? Почему нельзя - я понял. Но почему по той же причине не запрещено преобразование дабла в ссылку на постоянный флоат? Первое нельзя, потому что у нас есть double и мы хотим передать в функцию ссылку на него как ссылку на float. Функция по этой ссылке что-нибудь запишет и что мы получим? А во втором случае ссылка константная, поэтому функция туда ничего писать не будет. Мы можем создать временный float, присвоить ему значение нашего double и передать в функцию ссылку на float.
|