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

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

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 49, средняя оценка - 4.94
NightmareCode
14 / 7 / 1
Регистрация: 20.09.2009
Сообщений: 89
#1

Сравнение указателей и ссылок. - C++

15.06.2010, 19:35. Просмотров 6750. Ответов 21
Метки нет (Все метки)

Цитата Сообщение от Evg Посмотреть сообщение
В си есть указатели. Указатель и ссылка на низком уровне это одно и то же, но на уровне языка - разные вещи
Не совсем так для них компилятор вырабатывает разный ассемблерный код
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
int main()
{
    //mov dword ptr [dwC], 18h;
    int dwC=24;
    //Передача по ссылке
    //lea eax,[dwC]
    //mov dword ptr [ldwC1],eax
    int *ldwC1 (&dwC);         //значение получено ldwC1[0]-24
    //Присваивание другого указателя
    //mov eax,dword ptr [ldwC1]
    //mov dword ptr [ldwC2],eax
    int *ldwC2=ldwC1;          //значение получено ldwC2[0]-24
    //Присваивание адреса с преобразованием
    //mov eax,dword ptr [dwC] 
        //mov dword ptr [ldwC3],eax 
    int *ldwC3=*(int**)&dwC;   //значение не получено ldwC3[0]-неопределено
}
0
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
15.06.2010, 19:35
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Сравнение указателей и ссылок. (C++):

Использование ссылок и указателей - C++
Добрый вечер Помогите разобраться и понять «Использование ссылок и указателей» Прочел много литературы но понять сложно Объясните...

Касательно указателей и ссылок. - C++
Цитирую фразу из популярной ныне книги Айвора Хортона. "Никогда не возвращайте из функции ссылку на локальную переменную" Так вот. Не...

Ступор в возврате указателей и ссылок - C++
Изучаю С++ базовый курс от Шилтда, все проходил на твердую четверку, и на предпоследней теме про системы ввода-вывода абсолютно запоролся...

Совместное использование указателей и ссылок - C++
int *ptr; int &ref = *ptr; ref = 1; Вот и весь вопрос. Ничего плохого в этом нет?

Реализация программы с использованием ссылок и указателей - C++
Добрые люди! Подскажите, есть ли тут использованные ссылки и указатели? Препод не принимает лабораторную работу, пока я не реализую...

Объясните суть ссылок и указателей в коде - C++
Всем добрый день! В общем, есть код (не судите, что примера попроще я не подобрал, просто подумал, что лучше я спрошу прям на деле),...

21
NightmareCode
14 / 7 / 1
Регистрация: 20.09.2009
Сообщений: 89
19.06.2010, 14:54  [ТС] #16
Цитата Сообщение от Evg Посмотреть сообщение
Мы начали спорить о представлении на низком уровне (на уровне машинного кода). На низком уровне ссылка - это тот же самый указатель
C++
1
2
3
4
5
6
7
8
        //mov dword ptr [ebp-2A4h],1A59h
    int number=0x1A59;
    //lea eax,[ebp-2A4h]
    //mov dword ptr [ebp-2B0h],eax
    int *pNumber=&number;
    //lea eax,[ebp-2A4h]
    //mov dword ptr [ebp-2BCh],eax 
    int &rt=number;
Да выходит что на низком уровне ссылка-это по сути константный разыменнованый указатель.
0
alex_x_x
бжни
2449 / 1654 / 84
Регистрация: 14.05.2009
Сообщений: 7,162
19.06.2010, 16:16 #17
Цитата Сообщение от oxotnik Посмотреть сообщение
Указатель это число - адрес памяти, с которого начинается выделенная под объект область.
все-таки указатель - это переменная со своим типом, значение которой - адрес в виртуальной памяти
0
Evg
Эксперт CАвтор FAQ
18030 / 6262 / 427
Регистрация: 30.03.2009
Сообщений: 17,205
Записей в блоге: 27
19.06.2010, 16:53 #18
Цитата Сообщение от NightmareCode Посмотреть сообщение
Да выходит что на низком уровне ссылка-это по сути константный разыменнованый указатель.
На низком уровне ссылка - это ровно указатель. А вот разыменованный и константный - это уже на высоком уровне (на уровне языка). Т.е. в тексте программы у тебя по сути дела везде присутсвует неявная звёздночка (операция разыменования) - это верхний уровень. При этом низкий уровень (код) не отличаются вообще ничем. Т.е. низкоуровневое представление ссылки полностью эквивалентно представлению указателя
0
AzaKendler
214 / 116 / 9
Регистрация: 30.05.2011
Сообщений: 1,772
19.02.2012, 14:17 #19
хотелось бы так же увидеть комментарии по поводу rvalue
0
Миниатюры
Сравнение указателей и ссылок.  
Evg
Эксперт CАвтор FAQ
18030 / 6262 / 427
Регистрация: 30.03.2009
Сообщений: 17,205
Записей в блоге: 27
19.02.2012, 15:11 #20
Если честно, то вопроса не понял. Конкретно в данном случае ссылка не даёт скорости (ибо эквивалентна указателю). А с чего ты взял, что оно должно увеличить скорость работы? Я так понимаю, что ты где-то что-то прочитал, но не так понял
0
alex_x_x
бжни
2449 / 1654 / 84
Регистрация: 14.05.2009
Сообщений: 7,162
19.02.2012, 15:44 #21
AzaKendler, думаю эффект тут только относительно объектов - rvalue references позволяют избежать вызова конструктора копирования и связанных с ним издержек. Очевидно выигрыш тут будет больше чем одна инструкция асма
0
AzaKendler
214 / 116 / 9
Регистрация: 30.05.2011
Сообщений: 1,772
19.02.2012, 16:48 #22
alex_x_x, пожалуй ты прав наверно в этом вся соль

C++
1
2
3
4
5
6
7
8
9
10
11
12
remote_integer& operator=(remote_integer&& other) {
        cout << "MOVE ASSIGNMENT OPERATOR." << endl;
 
        if (this != &other) {
            delete m_p;
 
            m_p = other.m_p;
            other.m_p = NULL;
        }
 
        return *this;
    }
C++
1
2
3
4
5
6
7
8
9
10
11
12
remote_integer& operator=(remote_integer& other) {
      
 
        if (this != &other) {
            delete m_p;
 
            m_p = other.m_p;
            other.m_p = NULL;
        }
 
        return *this;
    }
как на твой взгляд в чем различие будет?


считается что вызова деструктора не будет в первом случае. т.е. данные не скопировались
а "как бы перенеслись" и обнулив данные объекта переданного по rvalue мы предотвращаем вызов его деструктора. если не так понял. поправьте

Добавлено через 5 минут
Evg, вопрос в том что если lvalue ref и указатель это на низком уровне одно и тоже, то rvalue ref
судя по всему отличается и хотелось более ясного представления, а что же он таки делает и почему дает те эффекты о которых пишется тут.
т.е. мне показалось что переменная см. скрин, вначале помещается в некую "область для временных данных". в общем хотелось мнения людей понимающих хорошо ассемблер.
помещая переменную в такую область какой выигрыш можно получить?
что прозойдет с объектами если к ним обратится через rvalue.
0
19.02.2012, 16:48
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
19.02.2012, 16:48
Привет! Вот еще темы с ответами:

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

Объяснить нюансы использования указателей, массивов и ссылок в функциях - C++
Здравствуйте. Скажите, а что выводит arry значения элемента массива или его адрес? А как понимать что функция возвращает ссылку на int?...

Особенности использования указателей и ссылок в C++ при возврате из функции - C++
Пусть у нас есть некий класс CBase и есть функция, которая создает и возвращает объект класса CBase. Создать она его может стеке или в...

Сравнение указателей - C++
Здравствуйте! Столкнулся с проблемой, не проходит условие при сравнении указателей. К примеру: char *str=&quot;Привет, как дела?&quot;; ...


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

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

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