Delphi vs C++ vs C#
, ну и Java немножко, где-то ближе к старшему байту номеров страниц
![]() |
Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
|
| ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
| [216.73.216.156] |
|
|
Правила раздела:
| Страницы: (495) « Первая ... 219 220 [221] 222 223 ... 494 495 ( Перейти к последнему сообщению ) |
Delphi vs C++ vs C#
, ну и Java немножко, где-то ближе к старшему байту номеров страниц
|
Сообщ.
#3301
,
|
|
|
|
нет операторов/выражений модификации переменных внутри выражения. Inc/Dec - процедуры. Если только через вызов функций с передачей по ссылке.
|
|
Сообщ.
#3302
,
|
|
|
|
Цитата Romkin @ Цитата D_KEY @ Для тебя может быть странно из-за того, что у вас в Delphi может быть и так и сяк, в зависимости от типа. В питоне все единообразно. ну да, ну да... ![]() ![]() a=2 b=a b=3 print(a) Да, именно единообразно. И твой пример это только подтверждает. Присваивание работает только с ссылками, значение с помощью него не изменить. Цитата Подумай над количеством архитектур, под которые пишут на С/С++. А уж явный порядок вычисления ставит крест на оптимизации, особенно если речь идет о встроенных типах.Странно когда это не определено. Цитата Хм... объявление "class function... virtual; abstract;" понятно? Конечно. Абстрактный метод класса(не объекта). Я саму задачу и ее решение не очень понял. Добавлено Сначала переменная a ссылается на 2, потом b ссылается на тоже значение, что и a, затем b ссылается на значение 3, а по прежнему ссылается на 2. |
|
Сообщ.
#3303
,
|
|
|
|
Цитата D_KEY @ Delphi и оптимизация - понятия не совместимые А уж явный порядок вычисления ставит крест на оптимизации, особенно если речь идет о встроенных типах. |
|
Сообщ.
#3304
,
|
|
|
|
Цитата trainer @ нет операторов/выражений модификации переменных внутри выражения. Inc/Dec - процедуры. Если только через вызов функций с передачей по ссылке. Так в С++ даже если вызвать через функции, все-равно будет UB, т.к. неизвестно, что будет вычисляться раньше i или inc(i). |
|
Сообщ.
#3305
,
|
|
|
|
Цитата D_KEY @ А я про это ни слова не сказал. В Delphi точного аналога С++-ного выражения f (i, i++); написАть вроде не получится. Так в С++ даже если вызвать через функции, все-равно будет UB |
|
Сообщ.
#3306
,
|
|
|
|
Romkin, если ты хочешь заменить в примере на питоне = на +=, то имей в виду, что a += b - истинный синтаксический сахар над a = a + b. Т.е. семантически создается новый объект со значением a+b и ссылка a начинает ссылаться на него.
|
|
Сообщ.
#3307
,
|
|
|
|
Цитата D_KEY @ А уж явный порядок вычисления ставит крест на оптимизации, особенно если речь идет о встроенных типах. То есть, если явно определен порядок вычисления аргументов, то оптимизации быть не может? Ерунда. Оптимизация этим не исчерпывается. Цитата D_KEY @ Конечно. Абстрактный метод класса(не объекта). Я саму задачу и ее решение не очень понял. Есть два модуля, с одинаковыми методами, но с разной реализацией. Создан класс, который определяет универсальные сигнатуры, потомки его подключают определенный модуль и реализуют конкретный вызов API. Плюс в классе объявляется экземпляр, методы которого обращаются к методам класса. Причем у него тоже есть виртуальные методы, все дело в том, что хоть сигнатуры и совпадают, но есть и дополнения, которые лучше использовать. То есть, в потомке перекрываются и методы класса и методы экземпляра под конкретную реализацию. Без наличия метакласса мне бы пришлось сделать две иерархии объектов, причем вторая - вырожденная, только методы доступа без данных. Либо в каждом потомке перекрывать методы доступа под конкретный ключ, что не хочется. В общем, класс является делегатом, объект его использует в этом смысле. Добавлено Цитата trainer @ В Delphi точного аналога С++-ного выражения f (i, i++); написАть вроде не получится. Было бы желание... ![]() ![]() function Inc(var i: integer): integer; begin i := i + 1; Result := i; end; Добавлено Цитата D_KEY @ Сначала переменная a ссылается на 2, потом b ссылается на тоже значение, что и a, затем b ссылается на значение 3, а по прежнему ссылается на 2. Логично. Но все равно несколько странно: точка есть - есть эффект, нет - нету... Это с позиций неофита если. |
|
Сообщ.
#3308
,
|
|
|
|
Цитата Romkin @ Это не точный аналог f(i,i++). Это аналог Было бы желание... ![]() ![]() int Inc(int& arg) { return arg++; } И, кстати: Цитата trainer @ Если только через вызов функций с передачей по ссылке. |
|
Сообщ.
#3309
,
|
|
|
|
Цитата Romkin @ Цитата D_KEY @ А уж явный порядок вычисления ставит крест на оптимизации, особенно если речь идет о встроенных типах. То есть, если явно определен порядок вычисления аргументов, то оптимизации быть не может? Ерунда. Оптимизация этим не исчерпывается. Не исчерпывается. Но конкретно этой оптимизации ты лишаешься При этом код такой вряд ли можно назвать образцом и его следует избегать и по соображениям читабельности. Цитата Цитата D_KEY @ Конечно. Абстрактный метод класса(не объекта). Я саму задачу и ее решение не очень понял. Есть два модуля, с одинаковыми методами, но с разной реализацией. Создан класс, который определяет универсальные сигнатуры, потомки его подключают определенный модуль и реализуют конкретный вызов API. Почему бы не создать интерфейс и две его реализации? Цитата Цитата D_KEY @ Сначала переменная a ссылается на 2, потом b ссылается на тоже значение, что и a, затем b ссылается на значение 3, а по прежнему ссылается на 2. Логично. Но все равно несколько странно: точка есть - есть эффект, нет - нету... Это с позиций неофита если. Странно как раз будет, если человек знаком с другими языками, где нет единообразия, или же с С/С++, где все единообразно, но действует семантика значений. Начинающему же все понятно. Тем более, что такое поведение больше согласуется с понятием переменной в математике, где сами значения никогда не меняются. |
|
Сообщ.
#3310
,
|
|
|
|
Цитата trainer @ Это не точный аналог f(i,i++). Это аналог Я привел примерный аналог i++ вроде бы. То есть f(i, Inc(i)) даст побочный эффект. Но поскольку порядок определен, будет так: сначала первый параметр, потом inc как второй. При начальном i=0 у f первый параметр 0, второй 1 и i=1. Плюс канделябр . |
|
Сообщ.
#3311
,
|
|
|
|
Лучше вообще избегать таких побочных эффектов в высокоуровневом коде. А на низком уровне системы в любом случае нужно быть внимательным.
|
|
Сообщ.
#3312
,
|
|
|
|
Цитата D_KEY @ Почему бы не создать интерфейс и две его реализации? И они будут оторваны от объекта, который явно зависит от конкретной реализации. А зачем? |
|
Сообщ.
#3313
,
|
|
|
|
Цитата Romkin @ Цитата D_KEY @ Почему бы не создать интерфейс и две его реализации? И они будут оторваны от объекта, который явно зависит от конкретной реализации. Почему явно? Зачем клиенту-то знать об этой зависимости? Цитата Почему нет А зачем? ? |
|
Сообщ.
#3314
,
|
|
|
|
Цитата D_KEY @ Почему явно? Зачем клиенту-то знать об этой зависимости? Какому клиенту? Я говорю о реализации объекта доступа. Клиент ничего не знает, он объект использует, а не методы класса. Добавлено Точнее сказать, класс здесь и выступает в роли такого интерфейса доступа. С каким резоном я должен отрывать реализацию? Как раз лучше, когда все рядом. |
|
Сообщ.
#3315
,
|
|
|
|
Romkin, а вот по-моему нелогично вычислять параметры слева направо, когда они передаются в cdecl функцию. Ладно, если в pascal. Так что как тут будет оптимимальней, ещё вопрос.
|