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

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

Войти
Регистрация
Восстановить пароль
 
Карлан
0 / 0 / 0
Регистрация: 28.12.2013
Сообщений: 8
#1

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

23.10.2016, 01:32. Просмотров 155. Ответов 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
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Какое отличие в работе двух этих функций? (C++):

Отличие функций [объясните] - C++
ZEXTERN int ZEXPORT compress OF((Bytef *dest, uLongf *destLen, const Bytef *source, uLong sourceLen));...

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

Функции работы со строками, отличие функций с добавлением _s - C++
При работе с строками в VS 2012, увидел от него предупреждение при использовании функций gets(), strcat() и др. Ругается что они являются...

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

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

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

4
GbaLog-
Любитель чаепитий
3122 / 1462 / 351
Регистрация: 24.08.2014
Сообщений: 5,175
Записей в блоге: 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Эксперт С++
4306 / 2325 / 574
Регистрация: 18.10.2014
Сообщений: 3,963
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
6857 / 3058 / 524
Регистрация: 15.11.2014
Сообщений: 6,932
Завершенные тесты: 1
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
Привет! Вот еще темы с ответами:

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

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

Результат функций при работе со строками - C++
Прохожу изучение языка по учебнику Павловской. Хотелось бы узнать о работе поиска подстроки. Дан код: int main(){ const int len=81; ...

Использование функций при работе с двумерными массивами - C++
Дана прямоугольная вещественная матрица . Обнулить все четные столбцы и нечетные строки. В полученной матрице отсортировать по возрастанию...


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

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

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