Модераторы: bsa

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> физич. смысл указателей и ссылкок, в чем заключается физический смысл ссылк 
:(
    Опции темы
Romikgy
Дата 24.12.2008, 22:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Любитель-программер
****


Профиль
Группа: Участник Клуба
Сообщений: 7326
Регистрация: 11.5.2005
Где: Porto Franco Odes sa

Репутация: 1
Всего: 146



обратно же все сводится к 
Цитата(Romikgy @  24.12.2008,  19:39 Найти цитируемый пост)
о ссылке как о еще одной названии переменой то все операции которые упомянуты вообще не имеют смысл ибо работають как с самой переменой

!!!!


--------------------
Владение русской орфографией это как владение кунг-фу — истинные мастера не применяют его без надобности. 
smile

PM   Вверх
mes
Дата 24.12.2008, 23:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 79
Всего: 250



Цитата(Romikgy @  24.12.2008,  22:21 Найти цитируемый пост)
о ссылке как о еще одной названии переменой то все операции которые упомянуты вообще не имеют смысл ибо работають как с самой переменой


Код

struct A
{
  A(int& _i) : i(_i) {}
  int & i; 
};

int some;
A a(some); 


в данном контексте кода ИМХО трудно говорить о ссылке как о просто еще одном названии переменной )





--------------------
PM MAIL WWW   Вверх
SABROG
Дата 24.12.2008, 23:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Hacker
****


Профиль
Группа: Завсегдатай
Сообщений: 2481
Регистрация: 18.9.2006

Репутация: 1
Всего: 91



Разница ссылки и простого адреса объекта в том, что компилятор двояко рассматривает операции с ссылкой. В одной ситуации он работает с ссылкой также как и с объектом на которую она ссылается, в другой ситуации ссылка превращается всего-лишь в адрес. Все зависит от того как её используют. Видимо именно это подразумевают ораторы, которые говорят об абстрактности ссылки.

Цитата(mes @  24.12.2008,  23:06 Найти цитируемый пост)
в данном контексте кода ИМХО трудно говорить о ссылке как о просто еще одном названии переменной )

Интересный "хак" на самом деле. Правда на уровне ассемблера ссылка все-равно превратиться в указатель... Можно использовать как вопрос на собеседовании, чтобы завалить тестируемого smile

Кстати где было бы удобно использовать подобное ? По сути можно насильно любому участку памяти присвоить тип без всякого приведения и "кастинга", без проверки типа и возможно для доступа к защищенным данным класса, если удастся вычислить их адрес.

Это сообщение отредактировал(а) SABROG - 24.12.2008, 23:30


--------------------
Национальная группа Russian Federation на QtCentre.
PM MAIL   Вверх
mes
Дата 25.12.2008, 01:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 79
Всего: 250



Цитата(UnrealMan @  25.12.2008,  00:49 Найти цитируемый пост)
Вам бы обучающие книги о C++ писать. Я даже название звучное придумал: "C++ глазами слесарей-сантехников" smile 

Хороашая идея и звучное название! Надо будет обдумать предложение  smile 


Цитата(SABROG @  24.12.2008,  23:12 Найти цитируемый пост)
Разница ссылки и простого адреса объекта в том, что компилятор двояко рассматривает операции с ссылкой. В одной ситуации он работает с ссылкой также как и с объектом на которую она ссылается, в другой ситуации ссылка превращается всего-лишь в адрес

Компилятор всегда одинаково с ней работает.. Это со стороны программиста выглядит по разному, в зависимости с какой колокольни он смотрит.  smile 

Цитата(SABROG @  24.12.2008,  23:12 Найти цитируемый пост)
. Видимо именно это подразумевают ораторы, которые говорят об абстрактности ссылки.

Если рассматривать код, опираясь на результат (машинный код),  то ссылка выглядит как призрак.. Хотя со стороны языка ничего призрачного  в ней нет.

Цитата(SABROG @  24.12.2008,  23:12 Найти цитируемый пост)
Интересный "хак" на самом деле. 

Хак ??? Не больший, чем вместо ссылки использовать указатель - а это  нормальное явление.

Цитата(SABROG @  24.12.2008,  23:12 Найти цитируемый пост)
Правда на уровне ассемблера ссылка все-равно превратиться в указатель...

Ну откуда берутся то указатели в асме ?!

Цитата(SABROG @  24.12.2008,  23:12 Найти цитируемый пост)
По сути можно насильно любому участку памяти присвоить тип без всякого приведения и "кастинга", без проверки типа и возможно для доступа к защищенным данным класса, если удастся вычислить их адрес.

Интересно, где в примере Вы увидели обход проверки типов ?? 


Это сообщение отредактировал(а) mes - 25.12.2008, 01:33


--------------------
PM MAIL WWW   Вверх
SABROG
Дата 25.12.2008, 01:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Hacker
****


Профиль
Группа: Завсегдатай
Сообщений: 2481
Регистрация: 18.9.2006

Репутация: 1
Всего: 91



Цитата(mes @  25.12.2008,  01:32 Найти цитируемый пост)
Интересно, где в примере Вы увидели обход проверки типов ?? 


Цитата(mes @  25.12.2008,  01:32 Найти цитируемый пост)
Хак ??? Не больший, чем вместо ссылки использовать указатель - а это  нормальное явление.


Предположительно так. Добавляем в класс union, который содержит указатель на int и второй указатель на любой тип данных. В указатель на int помещаем содержимое ссылки i. Пользуем указатель на наш тип данных.

Хотя, по идее, такое должно прокатить и с обычными указателями...

Это сообщение отредактировал(а) SABROG - 25.12.2008, 02:08


--------------------
Национальная группа Russian Federation на QtCentre.
PM MAIL   Вверх
mes
Дата 25.12.2008, 12:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 79
Всего: 250



Цитата(mes @  25.12.2008,  01:32 Найти цитируемый пост)
Интересно, где в примере Вы увидели обход проверки типов ??

Цитата(SABROG @  25.12.2008,  01:44 Найти цитируемый пост)
Добавляем в класс union, 


Ненадо сдвигать акцент хака  с uniona на ссылку. В примере нет ни намека на union. 

Цитата(SABROG @  25.12.2008,  01:44 Найти цитируемый пост)
Хотя, по идее, такое должно прокатить и с обычными указателями...

однозначно.. ссылка тут не при чем.



--------------------
PM MAIL WWW   Вверх
SABROG
Дата 25.12.2008, 16:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Hacker
****


Профиль
Группа: Завсегдатай
Сообщений: 2481
Регистрация: 18.9.2006

Репутация: 1
Всего: 91



Почитав стандарт, понял, что это нормальное поведение. Был не прав.


--------------------
Национальная группа Russian Federation на QtCentre.
PM MAIL   Вверх
J0ker
Дата 25.12.2008, 18:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 986
Регистрация: 17.9.2008

Репутация: 9
Всего: 14



Цитата(UnrealMan @ 25.12.2008,  00:49)
Вам бы обучающие книги о C++ писать. Я даже название звучное придумал: "C++ глазами слесарей-сантехников" smile

+1

я там где-то уже писАл, но никто не прислушался
повторяю есчо раз


ССЫЛКА - ЭТО АЛИАС ИМЕНИ ОБЪЕКТА!!!

и ничего более. Именно по этому передачу по ссылке в паскале иногда называют передачей по имени

Это сообщение отредактировал(а) J0ker - 26.12.2008, 01:57


--------------------
user posted image
PM MAIL   Вверх
UnrealMan
Дата 25.12.2008, 21:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 722
Регистрация: 30.3.2006

Репутация: 5
Всего: 32



Цитата(J0ker @  25.12.2008,  18:33 Найти цитируемый пост)
ССЫЛКА - ЭТО АЛИАС ИМЕНИ!!!

Не имени, а объекта или функции. Не каждому объекту можно поставить в соответствие переменную, которая его обозначает. Например, здесь

Код
const int &ref = 1;

ref ссылается на временный объект типа const int со значением 1. Время жизни этого временного объекта то же, что и у данной ссылки.

Адрес присущ любому объекту, но объект - это не адрес, переменная - это тоже не адрес, ссылка - это тоже не адрес, и указатель - это тоже не адрес. Адрес - это значение, идентифицирующее объект или функцию, а указатель - это объект, который предназначен для хранения адреса. Что касается ссылок, то они объектами не являются. Ссылка - это... это... это... smile ... всего лишь обозначение сущности (объекта или функции), с которой она может быть связана при инициализации. Про ссылочные типы разжёвывать не буду, ибо муторно и лениво. Эт я говорю, как оно всё есть в общепринятом понимании. Графоманам просьба не обращать внимание и продолжать постить сюда в том же духе, что и раньше.

Это сообщение отредактировал(а) UnrealMan - 25.12.2008, 21:57
PM MAIL   Вверх
J0ker
Дата 26.12.2008, 01:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 986
Регистрация: 17.9.2008

Репутация: 9
Всего: 14



исправил  smile 


--------------------
user posted image
PM MAIL   Вверх
mes
Дата 26.12.2008, 03:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 79
Всего: 250



Цитата(UnrealMan @  25.12.2008,  21:51 Найти цитируемый пост)
ref ссылается на временный объект типа const int со значением 1. Время жизни этого временного объекта то же, что и у данной ссылки.


UnrealMan, а в данном случае ?
Код

struct A {
    A(const int& ref) :i(ref){}
    const int& i;
};

int main()
{
   A * pa;

   {
       pa = new  A(1); 
   }

pa->i; // валидна ли ссылка ?
...



--------------------
PM MAIL WWW   Вверх
MAKCim
Дата 26.12.2008, 03:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Воін дZэна
****


Профиль
Группа: Экс. модератор
Сообщений: 5644
Регистрация: 10.12.2005
Где: Менск, РБ

Репутация: 2
Всего: 207



Цитата(UnrealMan @  25.12.2008,  21:51 Найти цитируемый пост)
Что касается ссылок, то они объектами не являются.

с т. з так называемого стандарта возможно
однако на самом деле...рассмотрим пракический пример
Код

extern int a;
extern void b(int &r);

int main()
{
    b(a);
    return 0;
}

Код

main:
.LFB2:
    leal    4(%esp), %ecx
.LCFI0:
    andl    $-16, %esp
    pushl   -4(%ecx)
.LCFI1:
    pushl   %ebp
.LCFI2:
    movl    %esp, %ebp
.LCFI3:
    pushl   %ecx
.LCFI4:
    subl    $4, %esp
.LCFI5:
    movl    $a, (%esp)
    call    _Z1bRi

c т. з функции b ссылка как раз вполне материальный объект размером 4 байта

Добавлено через 4 минуты и 47 секунд
и все-таки, господа UnrealMan и J0ker
еще раз перечитайте название топа  smile, по-моему графоманы здесь вы


--------------------
Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі ©

PM MAIL   Вверх
mes
Дата 26.12.2008, 03:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 79
Всего: 250



Цитата(MAKCim @  26.12.2008,  03:33 Найти цитируемый пост)

c т. з функции b ссылка как раз вполне материальный объект размером 4 байта 


метод с точки зрения си просто функция.. a заинлайненый -это просто кусок кода, но с точки зрения асма..
а с точки зрения cpp как был методом  так и остался..  smile 

кстати на многих функциональных языках нет переменных.. но "на самом то деле"  (если копнуть полученный объектный код )  есть..  smile 

поэтому спорить не установив общую "точку отсчета" бессмыслено  smile 

Это сообщение отредактировал(а) mes - 26.12.2008, 03:43


--------------------
PM MAIL WWW   Вверх
MAKCim
Дата 26.12.2008, 03:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Воін дZэна
****


Профиль
Группа: Экс. модератор
Сообщений: 5644
Регистрация: 10.12.2005
Где: Менск, РБ

Репутация: 2
Всего: 207



mes, 
к чему это?  smile 
я же специально оговорил, что с т. з теории ссылка - это одно, однако на практике, т. е с т. з физического смысла, ссылка - это другое


--------------------
Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі ©

PM MAIL   Вверх
SABROG
Дата 26.12.2008, 10:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Hacker
****


Профиль
Группа: Завсегдатай
Сообщений: 2481
Регистрация: 18.9.2006

Репутация: 1
Всего: 91



Цитата(UnrealMan @  25.12.2008,  21:51 Найти цитируемый пост)
Графоманам просьба не обращать внимание и продолжать постить сюда в том же духе, что и раньше.


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


--------------------
Национальная группа Russian Federation на QtCentre.
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0649 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.