The OpenNET Project / Index page

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

форумы  помощь  поиск  регистрация  майллист  вход/выход  слежка  RSS
"ссылки в с++"
Вариант для распечатки  
Пред. тема | След. тема 
Форумы Программирование под UNIX (Public)
Изначальное сообщение [ Отслеживать ]

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

 Оглавление

Сообщения по теме [Сортировка по времени | RSS]


1. "ссылки в с++"  
Сообщение от const (??) on 13-Дек-08, 23:34 
>Так что -  тип "ссылка на постоянный объект" законно может быть приведена к типу "ссылка на объект"?

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

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

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

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

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

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

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

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

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

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

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

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

4. "ссылки в с++"  
Сообщение от rasmon email on 16-Дек-08, 16:53 
>>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&
нельзя? Почему нельзя - я понял. Но почему по той же причине не запрещено преобразование дабла в ссылку на постоянный флоат?

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

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

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

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

6. "ссылки в с++"  
Сообщение от rasmon email on 16-Дек-08, 18:54 

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

можно ответить "да", а можно и "нет".

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

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

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

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

Архив | Удалить

Индекс форумов | Темы | Пред. тема | След. тема
Оцените тред (1=ужас, 5=супер)? [ 1 | 2 | 3 | 4 | 5 ] [Рекомендовать для помещения в FAQ]




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

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