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

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

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

Как работают ссылки - C++

30.07.2015, 19:03. Просмотров 599. Ответов 22
Метки нет (Все метки)

1 Здравствуйте маленький вопрос?
int d;
int &s=d;
как работает почему их типы должны быть одинаковы?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
30.07.2015, 19:03     Как работают ссылки
Посмотрите здесь:

Как работают ссылки и указатели? - C++
Не нашел описание того, почему именно так работает, везде говорится только то, что так надо делать и все Аргумент функции является...

Не пойму как работают ссылки внутри объекта - C++
Вот например есть у меня класс /*Hero.h*/ #include <iostream> using namespace std; class Hero{ public: void...

Как работают списки и как их создать вообще? - C++
Уважаемые программисты, помоги разобраться как работают списки и как их создать вообще! Я ищу информацию, ищу, но ничего мне не помогает....

Как работают драйвера? - C++
Разбираю драйвер-фильтр passthru, в нем есть функция MPSend которая получает а затем отсылает пакет далее (это пример ничего не делающего...

Как работают циклы? - C++
Мне нужно написать программу, выполняющую следующие действия: 1. Ввести две строки текста с подсказками при вводе; 2. Определить и...

Как работают файлы-контейнеры? - C++
Не знаю, как правильно сформулировать. Некоторые крупные программы использует файлы (которые хранят в себе большое количество других...

Как работают побитовые сдвиги? - C++
Люди объясните плиз как работают побитовые сдвиги << и >>, а то что то совсем запарился :confused:

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
taras atavin
Ушёл с форума.
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
31.07.2015, 16:15     Как работают ссылки #16
Цитата Сообщение от mozart_45 Посмотреть сообщение
почему их типы должны быть одинаковы?
потому что это синоним. Вот смотри, есть животное гипопотам, а теперь приходишь ты и говоришь: а теперь бегемот - синоним гипопотама. Бегемот с какого то перепугу будет запахом?

Добавлено через 1 минуту
Цитата Сообщение от Enno Посмотреть сообщение
2) Чтобы за отведённые пределы размера не вылезти. Очевидно же.
А вот фиг.
C++
1
2
3
4
5
6
union n
{
 float f;
 double d;
 folat r[300];
};
. Ни кому ни несовпадение типов, ни вылез за границы другого поля не мешает.

Добавлено через 42 секунды
Цитата Сообщение от Renji Посмотреть сообщение
s работает как указатель на d, который всегда разыменован (*s).
Ведёт себя действительно так. Но ни какой гарантии такой реализации нет.

Добавлено через 3 минуты
Цитата Сообщение от Enno Посмотреть сообщение
1) s располагается по тому же адресу что и d.
s может быть и дефолтно-разыменованным указателем. И даже сущностью, все изменения которой перехватываются копировщиком, который и копирует s по адресу d. Или вообще той же физической ячейкой памяти, но отображённой на другой адрес.

Добавлено через 31 секунду
Цитата Сообщение от Renji Посмотреть сообщение
И никому типы одинаковыми быть не должны.
Энто с какого?

Добавлено через 1 минуту
Цитата Сообщение от castaway Посмотреть сообщение
Mr.X, разве они не имеют один и тот же адрес? Мой компилятор солидарен с моей логикой и говорит обратное.
Компилятор лишь говорит, как он это реализовал. Да и то не полностью.
hoggy
6422 / 2640 / 458
Регистрация: 15.11.2014
Сообщений: 5,831
Завершенные тесты: 1
31.07.2015, 16:16     Как работают ссылки #17
Цитата Сообщение от Croessmah Посмотреть сообщение
объект и ссылка - это две разных сущности
согласно стандарту языка:
сущность только одна.
ссылка - её альтернативное имя, и не более того.

другое дело, как это будет расхлебывать компилятор.
здесь стандарт никаких особых ограничений не накладывает.
под капотом может быть что угодно.

другое дело, что средствами языка, вся эта "кухня компилятора" не доступна.

вы не можете взять адрес самой ссылки (как сущености) просто потому,
что она эту сущность не детонирует.
она детонирует оригинальный объект.

поэтому попытка взят адрес ссылки - это взятие адреса оригинального объекта.

ну и дальше:
попытка взять размер ссылки - взятие размера оригинального объекта.
и тд.
Tulosba
31.07.2015, 16:21
  #18

Не по теме:

Цитата Сообщение от hoggy Посмотреть сообщение
на эту сущность не детонирует.
не торопись ты так в написании текстов, а то часто слишком диструктор детонирует

taras atavin
Ушёл с форума.
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
31.07.2015, 16:23     Как работают ссылки #19
Цитата Сообщение от Tulosba Посмотреть сообщение
В случае с иерархией классов, тип экземпляра производного класса является так же и типом базового класса.
Нет. Нет и не может быть ни какого "типа класса", "класса типа" и вообще "типа типа". Это даже не масло маслянное, а масло самого мала даже без "из". Фактический тип экземпляра производного класса - сам производный класс. Но одновременно он представляет подвид экземпляра базового класса и в этом качестве его тип - базовый класс, как над категория производного класса. Это как человек - тоже животное, только разумное, а ещё это млекопитающее, позвоночное, многоклеточное и много кого ещё, но фактический его тип - хомо сапиенс.
Mr.X
Эксперт С++
3048 / 1693 / 265
Регистрация: 03.05.2010
Сообщений: 3,867
31.07.2015, 18:19     Как работают ссылки #20
Цитата Сообщение от Tulosba Посмотреть сообщение
тип и класс это разные понятия
Страуструп разделяет типы на конкретные (в том числе встроенные) и абстрактные. Класс может быть как конкретным типом, так и абстрактным. Еще он выделяет так называемые узловые классы, которые и не конкретные, и не абстрактные.
taras atavin
Ушёл с форума.
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
31.07.2015, 18:29     Как работают ссылки #21
Цитата Сообщение от Mr.X Посмотреть сообщение
Страуструп разделяет типы на конкретные (в том числе встроенные) и абстрактные.
А абстрактным может быть только класс.
castaway
Эксперт С++
4881 / 3017 / 370
Регистрация: 10.11.2010
Сообщений: 11,076
Записей в блоге: 10
Завершенные тесты: 1
31.07.2015, 20:48     Как работают ссылки #22
Mr.X, ты хорошо рассуждаешь по поводу некоторых моментов стандарта, но изначально уйдя от темы (судя по всему намеренно), ты не можешь ответить на элементарный вопрос. Отзыв именно за это.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
31.07.2015, 23:09     Как работают ссылки
Еще ссылки по теме:

как работают эти 4 функции - C++
Подскажите как работают эти 4 функции CTime CTime::operator ++() CTime CTime::operator --() CTime CTime::operator ++(int) CTime...

Как работают рекурсивные вызовы? - C++
здравствуйте. можете объяснить как работают рекурсивные вызовы. например : 1. когда вызывается дважды, что при этом происходит. что...

ifstream: как работают операторы << и >>? - C++
Объясните, пожалуйста, языком &quot;ребенка&quot;, как они работают? Не доходит! Не понятно, как в этом цикле иттерирует объект: ...

Не понятно как работают функции - C++
bool isstrprint (const char s) { int i = -1, ls = strlen(s); bool rc = true; if (s != 0x00) { while (i &lt;= ls &amp;&amp;...

Как работают указатели с массивами - C++
Хочу на простом примере перестановки двух элементов уяснить - как работают указатели с массивами, но ничего не получается. Объясните на...


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

Или воспользуйтесь поиском по форуму:
Tulosba
:)
Эксперт С++
4393 / 3236 / 297
Регистрация: 19.02.2013
Сообщений: 9,045
31.07.2015, 23:09     Как работают ссылки #23
Цитата Сообщение от Ilot Посмотреть сообщение
А если класс наследует закрыто?
Ты же сам знаешь ответ наверняка
В таком случае можно использовать ссылку на базовый класс внутри методов производного или в друзьях:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
struct B {};
 
struct D: private B {
    void f() {
        B& b = *this; // ok
    }
    friend void g();
};
 
void g() {
    B& b = *new D; // ok
}
 
int main() {
    B& b = *new D; // error
}
http://coliru.stacked-crooked.com/a/27a1cb7dd1b4f22f
Yandex
Объявления
31.07.2015, 23:09     Как работают ссылки
Ответ Создать тему
Опции темы

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