Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Карлан
0 / 0 / 0
Регистрация: 28.12.2013
Сообщений: 8
#1

Какое отличие в работе двух этих функций?

23.10.2016, 01:32. Просмотров 161. Ответов 4
Метки нет (Все метки)

Никак не могу понять различие в работе функций type& func() и type func(). Сделал себе микро-пример, но все равно не пойму.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
std::string a = "aa\n";
 
std::string& GetAA() 
{
    return a;
};
std::string GetAA2() 
{
    return a;
};
int _tmain(int argc, _TCHAR* argv[])
{
    std::cout << GetAA();
    std::cout << GetAA2();
    std::cin.get();
    
    return 0;
}
Пробую заменить в своей программе функцию типа const int& Function() на const int Function() и вроде ничего в поведении не меняется, но возможно я чего-то не знаю.

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
23.10.2016, 01:32
Ответы с готовыми решениями:

Отличие функций [объясните]
ZEXTERN int ZEXPORT compress OF((Bytef *dest, uLongf *destLen, ...

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

Функции работы со строками, отличие функций с добавлением _s
При работе с строками в VS 2012, увидел от него предупреждение при...

Отличие двух типов
Чем отличаются два типа: double и float? Напишите существенные отличия!

Как можно объяснить выполнение этих функций?
void push(st *s, int i) // функция заталкивания элемента в стек { s-&gt;data =...

4
GbaLog-
Любитель чаепитий
3160 / 1466 / 462
Регистрация: 24.08.2014
Сообщений: 5,190
Записей в блоге: 1
Завершенные тесты: 2
23.10.2016, 01:40 #2
Попробуйте так:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
std::string a = "aa\n";
 
std::string& GetAA() 
{
    return a;
};
std::string GetAA2() 
{
    return a;
};
int _tmain(int argc, _TCHAR* argv[])
{
    std::cout << GetAA();
    std::cout << GetAA2();
    GetAA() = "asdqwe";
    std::cout << GetAA2();
    std::cin.get();
    
    return 0;
}
http://en.cppreference.com/w/cpp/language/reference_initialization
0
Карлан
0 / 0 / 0
Регистрация: 28.12.2013
Сообщений: 8
23.10.2016, 03:03  [ТС] #3
С различием не константных функций разобрался, с различием константных нет, иными словами в чем отличие функций из такого примера:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
std::string a = "aa\n";
 
const std::string& GetAA() 
{
    return a;
};
const std::string GetAA2() 
{
    return a;
};
int _tmain(int argc, _TCHAR* argv[])
{
    std::cout << GetAA();
    std::cout << GetAA2();
    std::cin.get();
    
    return 0;
}
Тут уже ни в том, ни в другом случае переменную изменить не выходит.
0
TheCalligrapher
С чаем беда...
Эксперт CЭксперт С++
4386 / 2361 / 655
Регистрация: 18.10.2014
Сообщений: 4,002
23.10.2016, 04:22 #4
Цитата Сообщение от Карлан Посмотреть сообщение
иными словами в чем отличие функций из такого примера:
...
Тут уже ни в том, ни в другом случае переменную изменить не выходит.
В том, что первая функция возвращает lvalue, то есть всегда один и тот же объект в памяти.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#include <string>
#include <iostream>
 
std::string a = "aa";
 
const std::string& GetAA() 
{
    return a;
};
const std::string GetAA2() 
{
    return a;
};
 
int main(int argc, char* argv[])
{
    std::cout << GetAA() << std::endl;
    std::cout << GetAA2() << std::endl;
    
    const std::string *pstr = &GetAA();
    std::cout << *pstr << std::endl;
    std::cout << &a << " " << pstr << " " << &GetAA() << std::endl;
}
Свойства переменных далеко не сводятся к возможности/невозможности их изменить.

Ничего подобного невозможно с GetAA2(). А уж нужно ли вам это - это другой вопрос.
0
hoggy
Заблокирован
23.10.2016, 09:24 #5
Цитата Сообщение от Карлан Посмотреть сообщение
е могу понять различие в работе функций type& func() и type func()
первая возвращает ссылку на исходный объект
вторая - копию.
0
23.10.2016, 09:24
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
23.10.2016, 09:24

Указатель на строковую константу. В чем отличие двух приведенных примеров
char *x; x = &quot;Текст&quot;; это указатель на строковую константу. char x=&quot;Текст&quot;;...

В наследнике(-ах) требуется изменить возвращаемый тип этих функций.
Есть базовый класс. Есть наследник базового класса. В базовом классе есть...

Составить программу для нахожления точки пересечения этих функций
Кто нить кто понимает с++ помогите с задачкой :) Дана парабола y=ax2+bx+с и...


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

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

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