Форум программистов, компьютерный форум CyberForum.ru

Возвращаемое ссылочное значение - C++

Восстановить пароль Регистрация
 
BuGi
24 / 24 / 1
Регистрация: 02.01.2012
Сообщений: 371
10.09.2013, 21:01     Возвращаемое ссылочное значение #1
C++
1
2
3
4
5
6
7
8
9
int a = 1;
int& func(){return a;}
void main()
{
    int b = func();
    b+=111;
    cout << b << " " << a; 
    system("pause");
}
C++
1
2
3
4
5
6
7
8
9
int a = 1;
int func(){return a;}
void main()
{
    int b = func();
    b+=111;
    cout << b << " " << a; 
    system("pause");
}
Выводит одно и то же, хотя я рассчитывал увидеть в первом случае 112 112, а не 112 1 (думал, что работает примерно так же, как и в значении параметра). Если не так, то в чем разница между этими двумя вариантами?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
10.09.2013, 21:01     Возвращаемое ссылочное значение
Посмотрите здесь:

C++ Возвращаемое значение (класс)
C++ Возвращаемое значение функции
Возвращаемое значение функции C++
возвращаемое значение cos() C++
Возвращаемое значение C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Croessmah
Модератор
Эксперт С++
 Аватар для Croessmah
11836 / 6815 / 770
Регистрация: 27.09.2012
Сообщений: 16,899
Записей в блоге: 2
Завершенные тесты: 1
10.09.2013, 21:07     Возвращаемое ссылочное значение #2
Цитата Сообщение от BuGi Посмотреть сообщение
увидеть в первом случае 112 112, а не 112 1
С чего вдруг?
Функция вернула ссылку. Потом значение пременной b по сути приравнялось 1, потом прибавили к b 111, получили 112, а переменную a никто не изменял.

C++
1
int & b = func();
А так b - это уже будет ссылка на переменную, функция вернет ссылку на a, значит b тоже станет ссылкой на a
User409368
191 / 168 / 6
Регистрация: 09.09.2013
Сообщений: 524
10.09.2013, 21:07     Возвращаемое ссылочное значение #3
Цитата Сообщение от BuGi Посмотреть сообщение
рассчитывал увидеть в первом случае 112 112, а не 112 1
почему? все правильно выводится
C++
1
2
3
4
5
6
7
8
9
10
11
12
int a = 1;
 
int &func() { return a; }
 
 
int main()
{
    int b = func(); // b = 1;
 
    b += 111;       // b = 112
 
    cout << b << " " << a;  // 112 1

переменная a вообще нигде не изменяется
BuGi
24 / 24 / 1
Регистрация: 02.01.2012
Сообщений: 371
10.09.2013, 21:36  [ТС]     Возвращаемое ссылочное значение #4
То есть оператор взятия адреса и оператор при объявлении ссылки -- разные вещи?
И что представляет из себя ссылка? То есть моя функция возвращает ссылку, которая преобразовывается в int или сразу инт значение?
vodilawofer
29 / 27 / 2
Регистрация: 27.09.2012
Сообщений: 123
10.09.2013, 21:39     Возвращаемое ссылочное значение #5
изменится а вот так
C++
1
2
3
func() = 111;
 
cout << a; // 111
Croessmah
Модератор
Эксперт С++
 Аватар для Croessmah
11836 / 6815 / 770
Регистрация: 27.09.2012
Сообщений: 16,899
Записей в блоге: 2
Завершенные тесты: 1
10.09.2013, 21:40     Возвращаемое ссылочное значение #6
Урок 14 Использование ссылок в C++
BuGi
24 / 24 / 1
Регистрация: 02.01.2012
Сообщений: 371
10.09.2013, 21:54  [ТС]     Возвращаемое ссылочное значение #7
Croessmah, я это читал, но все равно остались эти вопросы, в той статье нет на них ответов
kamre
126 / 130 / 4
Регистрация: 25.12.2011
Сообщений: 438
10.09.2013, 22:41     Возвращаемое ссылочное значение #8
Вот еще интересный вариант:
C++
1
2
3
4
5
6
7
8
9
10
11
#include <iostream>
 
int a = 1;
 
int & func() { return a; }
 
int main() {
    auto b = func();
    b++;
    std::cout << "b = " << b << ", a = " << a << std::endl;
}
Возвращаемое ссылочное значение
coloc
погромист
 Аватар для coloc
409 / 245 / 15
Регистрация: 27.08.2012
Сообщений: 550
Завершенные тесты: 1
10.09.2013, 22:58     Возвращаемое ссылочное значение #9
kamre, интересно... Почему b принимает значение int a не int& ?
kamre
126 / 130 / 4
Регистрация: 25.12.2011
Сообщений: 438
10.09.2013, 23:03     Возвращаемое ссылочное значение #10
Цитата Сообщение от coloc Посмотреть сообщение
Почему b принимает значение int a не int& ?
http://herbsutter.com/2013/06/07/got...iables-part-1/
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
10.09.2013, 23:09     Возвращаемое ссылочное значение
Еще ссылки по теме:

C++ Возвращаемое значение делигата
C++ Значение, возвращаемое функцией (C++)
C++ Классы. Возвращаемое значение

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Olivеr
 Аватар для Olivеr
411 / 407 / 13
Регистрация: 06.10.2011
Сообщений: 830
10.09.2013, 23:09     Возвращаемое ссылочное значение #11
в первом случае, как и во втором, b будет копией а
это если еще не разжевали)
Yandex
Объявления
10.09.2013, 23:09     Возвращаемое ссылочное значение
Ответ Создать тему
Опции темы

Текущее время: 01:57. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru