Модераторы: bsa

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> В чем разница??? 
V
    Опции темы
yngwie19
Дата 12.10.2008, 00:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 829
Регистрация: 15.6.2008
Где: Новгород

Репутация: нет
Всего: нет



Скажите пожалуйста в чем разница, когда мы из функции возвращаем копию объекта, или ссылку объекта?
Например так:
Код


int func(int b = 5) {return b;}
int a = func();

 
или так:
Код

int& func(int b = 5) {return b;}
int a = func();

PM MAIL   Вверх
vinter
Дата 12.10.2008, 00:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Explorer
****


Профиль
Группа: Завсегдатай
Сообщений: 2735
Регистрация: 1.4.2006
Где: Н.Новгород

Репутация: 8
Всего: 56



разница в том, что в первом случае вернет копию, а во втором ссылку.


--------------------
Мой блог
PM MAIL WWW   Вверх
yngwie19
Дата 12.10.2008, 00:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 829
Регистрация: 15.6.2008
Где: Новгород

Репутация: нет
Всего: нет



vinter, а в каких случаях используется первый и второй вариант. Оба варианта по производительности работают одинакого?
PM MAIL   Вверх
jonie
Дата 12.10.2008, 00:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 5613
Регистрация: 21.8.2005
Где: Владимир

Репутация: 6
Всего: 118



с указателями (читать ссылками) можно делать левостороннии функции.. например:
Код

int someVar;
int& func() {return someVar;}
func() = 10;  //теперь someVar=10

я к тому, что данные по указателю менять можно.
--------
yngwie19 штука сложная. компилятор умеет оптимизировать. второй вариант должен быть НЕ быстрее первого, в теории. в практике же может оказаться равнозначно.

Это сообщение отредактировал(а) jonie - 12.10.2008, 00:50


--------------------
Что-то не поняли? -> Напейтесь до зеленых человечков... эта сверхцивилизация Вам поможет...
PM MAIL Jabber   Вверх
yngwie19
Дата 12.10.2008, 01:04 (ссылка)    | (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 829
Регистрация: 15.6.2008
Где: Новгород

Репутация: нет
Всего: нет



jonie, а в твоем примере функция func() вроде не должна видеть переменную someVar, или Я не прав?
PM MAIL   Вверх
jonie
Дата 12.10.2008, 01:06 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 5613
Регистрация: 21.8.2005
Где: Владимир

Репутация: 6
Всего: 118



почему не должна ? они на одном уровне видимости.


--------------------
Что-то не поняли? -> Напейтесь до зеленых человечков... эта сверхцивилизация Вам поможет...
PM MAIL Jabber   Вверх
yngwie19
Дата 12.10.2008, 01:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 829
Регистрация: 15.6.2008
Где: Новгород

Репутация: нет
Всего: нет



ну если ты б переменную объявил бы в func(), тогда да, а так она объявлена в main и соответственно func() о ней ничего не знает. Ее наверно нужно было как параметр передавать?
PM MAIL   Вверх
jonie
Дата 12.10.2008, 01:19 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 5613
Регистрация: 21.8.2005
Где: Владимир

Репутация: 6
Всего: 118



почему это она объявлена в main ???? где у меня это написано?)


--------------------
Что-то не поняли? -> Напейтесь до зеленых человечков... эта сверхцивилизация Вам поможет...
PM MAIL Jabber   Вверх
yngwie19
Дата 12.10.2008, 01:32 (ссылка)    | (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 829
Регистрация: 15.6.2008
Где: Новгород

Репутация: нет
Всего: нет



ну какая разница, главное что не в функции, func() про нее ничего не знает. Попробуй скомпили этот код
PM MAIL   Вверх
jonie
Дата 12.10.2008, 02:07 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 5613
Регистрация: 21.8.2005
Где: Владимир

Репутация: 6
Всего: 118



Код

int someVar;
int& func() {return someVar;}

int main()
{
    func() = 10;  //теперь someVar=10
    return 0;
}
гуд скомпилило.


--------------------
Что-то не поняли? -> Напейтесь до зеленых человечков... эта сверхцивилизация Вам поможет...
PM MAIL Jabber   Вверх
yngwie19
Дата 12.10.2008, 02:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 829
Регистрация: 15.6.2008
Где: Новгород

Репутация: нет
Всего: нет



аааа ну тогда ясно спасибо  smile 
PM MAIL   Вверх
yngwie19
Дата 12.10.2008, 17:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 829
Регистрация: 15.6.2008
Где: Новгород

Репутация: нет
Всего: нет



У меня еще один вопрос например есть функция func():
Код

int func() { int x = 5; return x;}
void main(void)
{
int y = 0;
   y+=finc();
}
Когда мы возвращаем х не как ссылку и как ссылку, есть ли в этом разница? 

PM MAIL   Вверх
jonie
Дата 12.10.2008, 17:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 5613
Регистрация: 21.8.2005
Где: Владимир

Репутация: 6
Всего: 118



по ссылке тут нельзя возвращать - вы вернете указателдб на локальную переменную функции, что черевато очень большим и сложноуловимым геморроем.


--------------------
Что-то не поняли? -> Напейтесь до зеленых человечков... эта сверхцивилизация Вам поможет...
PM MAIL Jabber   Вверх
yngwie19
Дата 12.10.2008, 18:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 829
Регистрация: 15.6.2008
Где: Новгород

Репутация: нет
Всего: нет



jonie, мог бы ты пояснить в чем гемор? и скажите.
1) Почему по ссылке возвращать нельзя?
2) Почему ты сказал, что вернется указатель на локальную переменную, там же вроде либо копия объекта возвращается либо ссылка.
PM MAIL   Вверх
IKM2007
Дата 12.10.2008, 19:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Зима близко
**


Профиль
Группа: Участник
Сообщений: 702
Регистрация: 26.4.2008
Где: olmedreca

Репутация: 3
Всего: 40



*deleted*

Это сообщение отредактировал(а) IKM2007 - 12.10.2008, 19:39


--------------------
"К чёрту обстоятельства, я создаю возможности."
Брюс Ли
PM MAIL Skype   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

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

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0778 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.