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

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

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

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

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

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

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

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

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

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

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

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

22
taras atavin
3888 / 1762 / 92
Регистрация: 24.11.2009
Сообщений: 27,565
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, разве они не имеют один и тот же адрес? Мой компилятор солидарен с моей логикой и говорит обратное.
Компилятор лишь говорит, как он это реализовал. Да и то не полностью.
0
hoggy
6813 / 3001 / 516
Регистрация: 15.11.2014
Сообщений: 6,795
Завершенные тесты: 1
31.07.2015, 16:16 #17
Цитата Сообщение от Croessmah Посмотреть сообщение
объект и ссылка - это две разных сущности
согласно стандарту языка:
сущность только одна.
ссылка - её альтернативное имя, и не более того.

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

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

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

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

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

Не по теме:

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

0
taras atavin
3888 / 1762 / 92
Регистрация: 24.11.2009
Сообщений: 27,565
31.07.2015, 16:23 #19
Цитата Сообщение от Tulosba Посмотреть сообщение
В случае с иерархией классов, тип экземпляра производного класса является так же и типом базового класса.
Нет. Нет и не может быть ни какого "типа класса", "класса типа" и вообще "типа типа". Это даже не масло маслянное, а масло самого мала даже без "из". Фактический тип экземпляра производного класса - сам производный класс. Но одновременно он представляет подвид экземпляра базового класса и в этом качестве его тип - базовый класс, как над категория производного класса. Это как человек - тоже животное, только разумное, а ещё это млекопитающее, позвоночное, многоклеточное и много кого ещё, но фактический его тип - хомо сапиенс.
0
Mr.X
Эксперт С++
3060 / 1705 / 265
Регистрация: 03.05.2010
Сообщений: 3,867
31.07.2015, 18:19 #20
Цитата Сообщение от Tulosba Посмотреть сообщение
тип и класс это разные понятия
Страуструп разделяет типы на конкретные (в том числе встроенные) и абстрактные. Класс может быть как конкретным типом, так и абстрактным. Еще он выделяет так называемые узловые классы, которые и не конкретные, и не абстрактные.
0
taras atavin
3888 / 1762 / 92
Регистрация: 24.11.2009
Сообщений: 27,565
31.07.2015, 18:29 #21
Цитата Сообщение от Mr.X Посмотреть сообщение
Страуструп разделяет типы на конкретные (в том числе встроенные) и абстрактные.
А абстрактным может быть только класс.
0
castaway
Эксперт С++
4924 / 3032 / 372
Регистрация: 10.11.2010
Сообщений: 11,085
Записей в блоге: 10
Завершенные тесты: 1
31.07.2015, 20:48 #22
Mr.X, ты хорошо рассуждаешь по поводу некоторых моментов стандарта, но изначально уйдя от темы (судя по всему намеренно), ты не можешь ответить на элементарный вопрос. Отзыв именно за это.
0
Tulosba
:)
Эксперт С++
4705 / 3240 / 297
Регистрация: 19.02.2013
Сообщений: 9,046
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
0
31.07.2015, 23:09
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
31.07.2015, 23:09
Привет! Вот еще темы с ответами:

Как работают эти 2 функции - C++
Помогите пожалуйста разобраться. Я уже 3 день не могу разобраться. Суть в том что есть структура и 5 функций EnterAutos(); SaveToFile();...

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

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

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


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

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

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