Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[18.226.251.68] |
|
Страницы: (11) [1] 2 3 ... 10 11 все ( Перейти к последнему сообщению ) |
Сообщ.
#1
,
|
|
|
Ок. У меня есть крутой класс complex_number. Покажи примерную схему, как мне его реализовать, чтобы в него легко можно было передавать и float, и class cool_real_number_having_long_mantissa_with_great_exponent.
Добавлено Ну как бы да. Это как раз то, что выше я обозвал "любой тип можно сделать ссылочным". Нужны значения, не используем &, нужна ссылочность, используем. Я этим легко управляю. Добавлено T и является, разве нет? Добавлено Цитата D_KEY @ Тогда ссылочных типов в Плюсах не было бы. Были бы простые модификаторы типа передачи параметров.Вот ссылки в C++ мне совсем не нравятся. Иногда даже думаю, не лучше ли бы было, если бы они не являлись самостоятельными типами, а были просто спецификаторами для параметров функции/возвращаемого значения Это сообщение было перенесено сюда или объединено из темы "D vs C++" |
Сообщ.
#2
,
|
|
|
Указатель?
Добавлено Цитата Qraizer @ Не совсем понимаю, что именно тебе нужно. Но подозреваю, что это делается аналогично плюсам. Например, специализацией перегруженных операторов. Ок. У меня есть крутой класс complex_number. Покажи примерную схему, как мне его реализовать, чтобы в него легко можно было передавать и float, и class cool_real_number_having_long_mantissa_with_great_exponent. Добавлено Цитата Qraizer @ При присваивании ссылоки другой ссылке T не копируется, а при присваивании "обычной" переменной копируется. То есть значение зависит от контекста.T и является, разве нет? Это сообщение было перенесено сюда или объединено из темы "D vs C++" |
Сообщ.
#3
,
|
|
|
Ну вот я про это и говорил. В языке с "чистой" семантикой значений есть проблема с тем, чтобы определить функцию разыменования. Но тут, как мне кажется, достаточно было бы спецификаторов. ref int foo(int *x) { return *x; } ref int - это не тип, тип тут int. ref - способ передачи/возврата. Цитата Тогда ссылочных типов в Плюсах не было бы. Были бы простые модификаторы типа передачи параметров. Вот я не понимаю, так ли это плохо... Добавлено Цитата applegame @ Указатель? И какие операции над "значениями" типа ссылки я могу делать? Да у ссылки даже размера нет Добавлено Цитата applegame @ Вряд ли, не помню когда это было. А в последнее время как-то не возникало необходимости в ссылках. У ссылки в плюсах есть серьезное отличие от указателя: ссылка требует обязательной инициализации, то бишь без специальных ухищрений ссылка не может ссылаться на несуществующий объект (уничтожение объекта после создания ссылки не учитываем), а вот указатель может указывать на null или вообще в случайное место. Это отдельная тема. Некий nullable/option/maybe нужен. Это сообщение было перенесено сюда или объединено из темы "D vs C++" |
Сообщ.
#4
,
|
|
|
Цитата D_KEY @ И какие операции над "значениями" типа ссылки я могу делать? Да у ссылки даже размера нет А никаких. И не должен мочь, к слову. Это сообщение было перенесено сюда или объединено из темы "D vs C++" |
Сообщ.
#5
,
|
|
|
Цитата Flex Ferrum @ Почему никаких? А копирование?А никаких. И не должен мочь, к слову. void foo(int& x) { int& y = x; // какая операция здесь происходит? } Это сообщение было перенесено сюда или объединено из темы "D vs C++" |
Сообщ.
#6
,
|
|
|
Цитата Flex Ferrum @ Цитата D_KEY @ И какие операции над "значениями" типа ссылки я могу делать? Да у ссылки даже размера нет А никаких. И не должен мочь, к слову. Тогда зачем ссылки в языке в качестве типов? Это сообщение было перенесено сюда или объединено из темы "D vs C++" |
Сообщ.
#7
,
|
|
|
Цитата D_KEY @ Ну, де-факто он есть и равен размеру указателя.Да у ссылки даже размера нет https://glot.io/snippets/ergz7vqc42 Хз как оно в стандарте описано, implementation specific? Это сообщение было перенесено сюда или объединено из темы "D vs C++" |
Сообщ.
#8
,
|
|
|
applegame, возьми sizeof, попробуй сделать массив ссылок.
Это сообщение было перенесено сюда или объединено из темы "D vs C++" |
Сообщ.
#9
,
|
|
|
В D, кстати, "указатель" на класс размер как раз таки имеет и он равен размеру указателя, что сам по себе еще тот WAT:
https://glot.io/snippets/ergzfr193j Цитата D_KEY @ Да, я знаю, что это невозможно:applegame, возьми sizeof, попробуй сделать массив ссылок. Цитата СтандартЪ There shall be no references to references, no arrays of references, and no pointers to references. Это сообщение было перенесено сюда или объединено из темы "D vs C++" |
Сообщ.
#10
,
|
|
|
Цитата D_KEY @ Тогда зачем ссылки в языке в качестве типов? Ты меня расстраиваешь. Ссылка - это не отдельный тип, а модификатор типа. Точно так же как const или volatile. Тебя ведь не удивляет, что const-объект ты не можешь модифицировать? Тогда почему тебя удивляет, что для ссылки запрещены некоторые другие наборы операций? Добавлено Ссылочный тип в C++ - это способ задать синоним переменной. Что будет под капотом этого синонима в данном конкретном месте программы - решает компилятор. Это сообщение было перенесено сюда или объединено из темы "D vs C++" |
Сообщ.
#11
,
|
|
|
Цитата Flex Ferrum @ Цитата D_KEY @ Тогда зачем ссылки в языке в качестве типов? Ты меня расстраиваешь. Ссылка - это не отдельный тип, а модификатор типа. Точно так же как const или volatile. Тебя ведь не удивляет, что const-объект ты не можешь модифицировать? Тогда почему тебя удивляет, что для ссылки запрещены некоторые другие наборы операций? Добавлено Ссылочный тип в C++ - это способ задать синоним переменной. Что будет под капотом этого синонима в данном конкретном месте программы - решает компилятор. Не вижу тут ответа на мой вопрос Это сообщение было перенесено сюда или объединено из темы "D vs C++" |
Сообщ.
#12
,
|
|
|
Цитата D_KEY @ Не вижу тут ответа на мой вопрос Ещё раз. Ссылка - это не отдельный тип (как, например, std::reference_wrapper). Это модификатор имеющегося типа. Поэтому сложно дать ответ на вопрос, который поставлен некорректно. Это сообщение было перенесено сюда или объединено из темы "D vs C++" |
Сообщ.
#13
,
|
|
|
Цитата Flex Ferrum @ Цитата D_KEY @ Не вижу тут ответа на мой вопрос Ещё раз. Ссылка - это не отдельный тип (как, например, std::reference_wrapper). Это модификатор имеющегося типа. Поэтому сложно дать ответ на вопрос, который поставлен некорректно. Хорошо. Зачем ссылки в языке в качестве модификатора типа? Это сообщение было перенесено сюда или объединено из темы "D vs C++" |
Сообщ.
#14
,
|
|
|
Цитата D_KEY @ Зачем ссылки в языке в качестве модификатора типа? Затем, чтобы была возможность создавать алиасы для объектов. Не указатели на объекты, которые ведут себя как объекты-значения, а полноценные алиасы, которые обрабатываются компилятором так, как он считает нужным. Работая со ссылкой ты всегда работаешь с оригинальным объектам. Это сообщение было перенесено сюда или объединено из темы "D vs C++" |
Сообщ.
#15
,
|
|
|
Цитата Flex Ferrum @ То бишь ссылка это просто красявый синтаксис для разыменованного указателя.Затем, чтобы была возможность создавать алиасы для объектов. Не указатели на объекты, которые ведут себя как объекты-значения, а полноценные алиасы, которые обрабатываются компилятором так, как он считает нужным. Работая со ссылкой ты всегда работаешь с оригинальным объектам. Это сообщение было перенесено сюда или объединено из темы "D vs C++" |