Форум программистов, компьютерный форум, киберфорум
Наши страницы

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

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

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

10.09.2013, 21:01. Просмотров 504. Ответов 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 (думал, что работает примерно так же, как и в значении параметра). Если не так, то в чем разница между этими двумя вариантами?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
10.09.2013, 21:01
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Возвращаемое ссылочное значение (C++):

Возвращаемое значение - C++
Как сделать так, что бы в зависимости от подаваемых аргументов, функция возвращала разные значения? Пробовал через шаблоны, но не...

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

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

Возвращаемое значение (класс) - C++
class shtraf { public: struct sh { int vel; char number; sh *next; };

Классы. Возвращаемое значение - C++
Всем привет:) Помогите исправить ошибки template &lt;class T&gt; class Vector { private: T *m_data; public: ...

Возвращаемое значение функции - C++
Здравствуйте Я тут новенький. Очень трудно у вас проходить регистрацию. У меня вопрос по С++ Компилятор: Code Blocks ...

10
Croessmah
Ушел
13768 / 8018 / 924
Регистрация: 27.09.2012
Сообщений: 19,740
Записей в блоге: 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
1
User409368
191 / 168 / 7
Регистрация: 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 вообще нигде не изменяется
0
BuGi
24 / 24 / 1
Регистрация: 02.01.2012
Сообщений: 371
10.09.2013, 21:36  [ТС] #4
То есть оператор взятия адреса и оператор при объявлении ссылки -- разные вещи?
И что представляет из себя ссылка? То есть моя функция возвращает ссылку, которая преобразовывается в int или сразу инт значение?
0
vodilawofer
29 / 27 / 2
Регистрация: 27.09.2012
Сообщений: 123
10.09.2013, 21:39 #5
изменится а вот так
C++
1
2
3
func() = 111;
 
cout << a; // 111
1
Croessmah
Ушел
13768 / 8018 / 924
Регистрация: 27.09.2012
Сообщений: 19,740
Записей в блоге: 3
Завершенные тесты: 1
10.09.2013, 21:40 #6
Урок 14 Использование ссылок в C++
1
BuGi
24 / 24 / 1
Регистрация: 02.01.2012
Сообщений: 371
10.09.2013, 21:54  [ТС] #7
Croessmah, я это читал, но все равно остались эти вопросы, в той статье нет на них ответов
0
kamre
127 / 131 / 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;
}
Возвращаемое ссылочное значение
1
coloc
погромист
411 / 247 / 15
Регистрация: 27.08.2012
Сообщений: 550
Завершенные тесты: 1
10.09.2013, 22:58 #9
kamre, интересно... Почему b принимает значение int a не int& ?
0
kamre
127 / 131 / 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/
1
Olivеr
412 / 408 / 13
Регистрация: 06.10.2011
Сообщений: 832
10.09.2013, 23:09 #11
в первом случае, как и во втором, b будет копией а
это если еще не разжевали)
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
10.09.2013, 23:09
Привет! Вот еще темы с ответами:

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

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

Возвращаемое значение функции - 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++) ...

Возвращаемое значение метода - C++
Здравствуйте Подскажите пожалуйста что неправильно указано в в объявлении метода и возвращаемом значении (компилятор выдает...


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

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Опции темы

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