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

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

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

Ссылки, стек - C++

11.08.2011, 20:19. Просмотров 460. Ответов 7
Метки нет (Все метки)

Полистал форум, подобная тема уже была, но ответ был "генерируется ошибка на подобную ситуацию".
В данном случае ошибки нет, в связи с этим вопрос:
Что помещается в стек в данном случае и ссылку на что принимает функция SetRadius()?

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
class SimpleCircle
{
    int itsRadius;
public:
    SimpleCircle(): itsRadius(0)
    {}
    ~SimpleCircle()
    {}
    void SetRadius(int const &radius)
    {
        itsRadius = radius;
    }
    int GetRadius() const
    {
        return itsRadius;
    }
};
 
int main(int argc, char *argv[])
{
    SimpleCircle obj;
    obj.SetRadius(2);
    cout << obj.GetRadius();
    return 0;
}
Просьба ответить тому кто действительно знает, а не "догадывается" или "думает".
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
11.08.2011, 20:19     Ссылки, стек
Посмотрите здесь:

Программа добавляет введенный массив 5*5 в стек и выводит полученный стек двумя столбцами - C++
Программа добавляет введенный массив 5*5 в стек и выводит полученный стек двумя столбцами #include &lt;iostream&gt; #include &lt;stdlib.h&gt; ...

Переменные в стеке. Где хранятся? Как обрабатываются? Есть ли программный стек или только стек процессора? - C++
Есть у меня пробелы в познаниях, хотел бы их устранить. 1. Что такое стек в самом языке С++ ? 2. В какой памяти он хранится и почему...

при работе рекурсивной функции заканчивается стек и программа соответственно; как сделать так, чтобы она писала "стек закончился"? - C++
Сабж g++ 4.5.0

Зачем нужны rvalue ссылки, если есть универсальные ссылки - C++
Читаю книгу Скотта Мэйерса... Что-то я совсем запутался с этими rvalue ссылками. Я не пойму, зачем нужны rvalue ссылки, если есть...

Структура стек (: добавить элемент в стек, удалить элемент из стека, получить значение с вершины стека, размер стека...) - C++
Всем привет,ребят помогите пожалуйста с лабой,вообще без понятия про стеки:( Может кто то делал,или встречался с таким заданием: ...

Стек - C++
Как сделать чтобы стек заполнялся в диапазоне -50..+50 , размерность вводится с клавиатуры? Помогите пожалуйста добавить в этот код. ...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
OstapBender
583 / 521 / 35
Регистрация: 22.03.2011
Сообщений: 1,585
11.08.2011, 20:26     Ссылки, стек #2
очевидно, ссылку на константное целое )
в данном случае в стек - ничего .
ArtSL
8 / 7 / 0
Регистрация: 14.02.2010
Сообщений: 40
11.08.2011, 20:28  [ТС]     Ссылки, стек #3
эм, а где оно тогда хранится? для него ведь память не выделяется
grizlik78
Эксперт С++
1904 / 1436 / 109
Регистрация: 29.05.2011
Сообщений: 2,990
11.08.2011, 20:39     Ссылки, стек #4
На самом деле, что помещать в стек, и где хранить константу — целиком дело компилятора.
Если не включать оптимизацию, то GCC создаёт временную переменную, адрес которой и передаёт в функцию. Но если оптимизацию всё-таки включить, то функция будет "встроена" и константа будет записана напрямую в нужное место. (На самом деле здесь компилятор весь класс выкидывает и сразу двойку в cout отправляет ).
ArtSL
8 / 7 / 0
Регистрация: 14.02.2010
Сообщений: 40
11.08.2011, 20:52  [ТС]     Ссылки, стек #5
про оптимизацию подробнее можно где-нибудь почитать? что может откинуть, допустим компилятор вправе проигнорировать inline и т.п..
и.. такая запись функции считается корректной при передаче константы или правильнее передать по значению?
fasked
Эксперт С++
4933 / 2513 / 180
Регистрация: 07.10.2009
Сообщений: 4,311
Записей в блоге: 1
11.08.2011, 20:53     Ссылки, стек #6
Цитата Сообщение от ArtSL Посмотреть сообщение
такая запись функции считается корректной при передаче константы или правильнее передать по значению?
Считается корректной, но особого смысла нет. То есть разницы между передачей по значению и по ссылке переменной типа int нет.
grizlik78
Эксперт С++
1904 / 1436 / 109
Регистрация: 29.05.2011
Сообщений: 2,990
11.08.2011, 21:04     Ссылки, стек #7
Запись (int const &radius) корректна, но бессмысленна. Размер переменной равен или меньше адреса, который передаётся в функцию. Встроенные типы правильнее передавать по значению.
Про оптимизацию где почитать — не знаю. Я читаю ассемблерные листинги, полученные от компилятора с разными уровнями оптимизации

Добавлено через 3 минуты
Цитата Сообщение от fasked Посмотреть сообщение
То есть разницы между передачей по значению и по ссылке переменной типа int нет.
Ну вот в моём случае есть. Но не в пользу ссылки
1. запись двойки во временную переменную.
2. вычисление адреса (8 байт)
3. передача адреса в функцию.
Вместо
1. передача константы в функцию

Добавлено через 3 минуты
Но я надеюсь, что эта разница обусловлена только отключённым оптимизатором.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
11.08.2011, 21:28     Ссылки, стек
Еще ссылки по теме:

Стек - C++
#include &quot;stdafx.h&quot; #include &lt;iostream&gt; using namespace std; class Stack { private: struct st ...

Стек - C++
Помогите с таким задание: Данное задание реализовать в виде стека. Все основные действия необходимые для решении задачи должны быть...

Стек - C++
Реализовать при помощи одного массива два стека, суммарное количество элементов в которых ограничено длиной массива. Все стандартные...

Стек в С++ - C++
Пожалуйста помогите разобраться! Напишите пример стека в прграмме и объясните пошагово его действие... Среда программирования С + + ...


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

Или воспользуйтесь поиском по форуму:
fasked
Эксперт С++
4933 / 2513 / 180
Регистрация: 07.10.2009
Сообщений: 4,311
Записей в блоге: 1
11.08.2011, 21:28     Ссылки, стек #8

Не по теме:

Цитата Сообщение от grizlik78 Посмотреть сообщение
Ну вот в моём случае есть. Но не в пользу ссылки
Конечно, передача по значению в данном случае более безопасна и эффективна. И писанины в какой-то степени меньше. Я с этим не спорю.
Но когда, например, реализуется шаблонный класс, то в итоге останутся все равно ссылки Случай другой, но я просто хочу сказать то, что передача по ссылке это не плохо.



Кстати. Для следующих двух случаев генерируется идентичный ассемблерный код.
C++
1
obj.SetRadius(214);
C++
1
2
3
4
int t = 214;
obj.SetRadius(t);
 
t = 25;
Assembler
1
movl    $214, -20(%rbp)
Что подтверждает:
Цитата Сообщение от grizlik78 Посмотреть сообщение
На самом деле, что помещать в стек, и где хранить константу — целиком дело компилятора.
Как видно, прямиком в регистр записывается
Yandex
Объявления
11.08.2011, 21:28     Ссылки, стек
Ответ Создать тему
Опции темы

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