Delphi vs C++ vs C#
, ну и Java немножко, где-то ближе к старшему байту номеров страниц
![]() |
Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
|
| ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
| [216.73.216.192] |
|
|
Правила раздела:
| Страницы: (495) « Первая ... 406 407 [408] 409 410 ... 494 495 ( Перейти к последнему сообщению ) |
Delphi vs C++ vs C#
, ну и Java немножко, где-то ближе к старшему байту номеров страниц
|
Сообщ.
#6106
,
|
|
|
|
Цитата Qraizer @ я просил представить в синтаксисе C++ границы этих скопов: ![]() ![]() int x; void f() { int y = ++x; { int z = ++x; { int t = ++x; } } } Здесь только одна привязка для x. |
|
Сообщ.
#6107
,
|
|
|
|
Почему? Скопов же четыре.
|
|
Сообщ.
#6108
,
|
|
|
|
Цитата Qraizer @ Почему? Скопов же четыре. Потому, что ты их(биндинги) не создавал. |
|
Сообщ.
#6109
,
|
|
|
|
Естественно. Но они меня и не интерсуют, я их создам, когда придумаю, как. А я не придумаю, пока не пойму, как управлять его границами в C++-программе.
|
|
Сообщ.
#6110
,
|
|
|
|
Цитата Qraizer @ Естественно. Но они меня и не интерсуют, я их создам, когда придумаю, как. А я не придумаю, пока не пойму, как управлять его границами в C++-программе. Та же самая лексическая область видимости, только расширенная вызываемыми функциями. Еще раз: ![]() ![]() /*"специальная" переменная*/int x = 10; void f() { std::cout << x << std::endl; // здесь мы будем обращаться к тому x, что находится ближе всего в окружающих нас scope'ах по стеку вызовов } int g() { // в текущем scope x ссылается на глобальную переменную со значением 10 f(); // 10 { /*биндинг специальной переменной*/int x = 20; // теперь x ссылается на локальную привязку f(); // 20 } // сново ссылаемся на глобальный x f(); // 10 } |
|
Сообщ.
#6111
,
|
|
|
|
Т.е. скоп - это обычные {}, что ли? Так бы и сказал сразу.
Теперь: правильно ли я понимаю, что { делает снимок глобальных переменных и помещает прежние значения в стек, а } восстанавливает из вершины стека их значения? При этом стеки ко всему прочему ещё и локальные в нитках. |
|
Сообщ.
#6112
,
|
|
|
|
Цитата Qraizer @ Т.е. скоп - это обычные {}, что ли? Так бы и сказал сразу. Теперь: правильно ли я понимаю, что { делает снимок глобальных переменных и помещает прежние значения в стек, а } восстанавливает из вершины стека их значения? При этом стеки ко всему прочему ещё и локальные в нитках. Ну типа того. Т.е. дубовая реализация - это словарь идентификатора нитки и "стека" значений переменной, при создании биндинга делаем push, при смерти биндинга - pop для "стека" переменной нитки. |
|
Сообщ.
#6114
,
|
|
|
|
Сейчас не могу смотреть подробно, но там вроде банальное нарушение ODR. По-моему человек решил, что в С++ есть модули |
|
Сообщ.
#6115
,
|
|
|
|
Цитата D_KEY @ Угу. Сейчас не могу смотреть подробно, но там вроде банальное нарушение ODR. |
|
Сообщ.
#6116
,
|
|
|
|
korvin, а что ты хотел этим сказать?
|
|
Сообщ.
#6117
,
|
|
|
|
Цитата D_KEY @ korvin, а что ты хотел этим сказать? Скучно становится в холиварах, да? |
|
Сообщ.
#6118
,
|
|
|
|
Цитата KILLER @ Цитата D_KEY @ korvin, а что ты хотел этим сказать? Скучно становится в холиварах, да? ![]() Вообще все пропало... Поговорить что ли об rvalue-ссылках и их аналогах в других языках... Можно, кстати, сравнить с тем же CL, где есть странные функции работы со списками, которые в целях оптимизации портят произвольным образом(зависимым от реализации) исходные списки во время получения результата, при этом если ты воспользовался исходным списком, то ССЗБ. При этом никакого способа что-либо проверить/гарантировать нет. В этом смысле, явная работа с временными объектами(в лиспе для них обычно такие фокусы и используют, как я понял), а так же std::move выглядят как-то интереснее. Причем все еще сильно зависит от реализации CL: gcl: ![]() ![]() >(defparameter *list* (list 3 6 1 2)) *LIST* >(sort *list* #'<) (1 2 3 6) >*list* (3 6) clisp: ![]() ![]() [1]> (defparameter *list* (list 3 6 1 2)) *LIST* [2]> (sort *list* #'<) (1 2 3 6) [3]> *list* (1 2 3 6) |
|
Сообщ.
#6119
,
|
|
|
|
Цитата D_KEY @ Можно, кстати, сравнить с тем же CL, где есть странные функции работы со списками, которые в целях оптимизации портят произвольным образом(зависимым от реализации) исходные списки во время получения результата, при этом если ты потрудился прочитать стандарт, то ССЗБ. FIXED Добавлено Цитата D_KEY @ korvin, а что ты хотел этим сказать? То что C++ как обычно неадекватен и состоит из костылей чуть менее, чем наполовину, призванных решить проблемы, которых в других языках просто не могут возникнуть. |
|
Сообщ.
#6120
,
|
|
|
|
Цитата korvin @ То что C++ как обычно неадекватен и состоит из костылей чуть менее, чем наполовину, призванных решить проблемы, которых в других языках просто не могут возникнуть. Так а причем тут С++ ? Если ты сам написал же: Цитата korvin @ Можно, кстати, сравнить с тем же CL, где есть странные функции работы со списками, которые в целях оптимизации портят произвольным образом(зависимым от реализации) исходные списки во время получения результата, при этом если ты потрудился прочитать стандарт, то ССЗБ. Примени эту фразу и к С++. Или чо, хочешь сказать что в Cl томже нельзя сделать вообще никакую логическую ошибку ? |