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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
BuGi
24 / 24 / 1
Регистрация: 02.01.2012
Сообщений: 371
#1

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

10.09.2013, 21:01. Просмотров 475. Ответов 10
Метки нет (Все метки)

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++
Всем доброго времени суток. не могу понять почему cos() возвращает такие значения... cout&lt;&lt;&quot;F &quot;&lt;&lt;cos(90*M_PI/180.0)&lt;&lt;endl; ...

Возвращаемое значение функции - C++
void tokenize(string str_translate){ char char_translate; strcpy(char_translate, str_translate.c_str()); // string to char* ...

Реакция на возвращаемое значение - C++
Здравствуйте, Есть программа которая выполняеться и после всех действий удаляет себя. Но появилась проблема, если закрыть программу...

Значение, возвращаемое функцией (C++) - C++
В общем, задача такая. Написать программу, печатающую все вводимые символы в нижнем регистре. Программа должна использовать цикл while....

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Croessmah
Модератор
Эксперт CЭксперт С++
13132 / 7395 / 828
Регистрация: 27.09.2012
Сообщений: 18,217
Записей в блоге: 3
Завершенные тесты: 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
Модератор
Эксперт CЭксперт С++
13132 / 7395 / 828
Регистрация: 27.09.2012
Сообщений: 18,217
Записей в блоге: 3
Завершенные тесты: 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
Сообщений: 443
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
погромист
410 / 246 / 15
Регистрация: 27.08.2012
Сообщений: 550
Завершенные тесты: 1
10.09.2013, 22:58 #9
kamre, интересно... Почему b принимает значение int a не int& ?
kamre
126 / 130 / 4
Регистрация: 25.12.2011
Сообщений: 443
10.09.2013, 23:03 #10
Цитата Сообщение от coloc Посмотреть сообщение
Почему b принимает значение int a не int& ?
http://herbsutter.com/2013/06/07/got...iables-part-1/
Olivеr
412 / 408 / 13
Регистрация: 06.10.2011
Сообщений: 831
10.09.2013, 23:09 #11
в первом случае, как и во втором, b будет копией а
это если еще не разжевали)
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
10.09.2013, 23:09
Привет! Вот еще темы с ответами:

Возвращаемое значение функции - C++
Здарвствуйте. Моя задача состоит в написании следующей программы: вычислить среднее арифметическое значение элементов матрицы W(L,L),...

Возвращаемое значение функции - C++
array&amp; array::operator = (const array &amp;q) { if (this != &amp;q) { delete s; s=new int; for(len=0;len&lt;q.len;s=q.s,len++) ...

Template возвращаемое значение - C++
функция принимает различные типы и делает с ними операцию. И не известно какой тип она должна вернуть. например если пришел int и float,...

Возвращаемое значение в class - C++
Здравствуйте можно ли как-то возвраить значение основной программе, если операцию я проводил в в class?


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
10.09.2013, 23:09
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru