Delphi vs C++ vs C#
, ну и Java немножко, где-то ближе к старшему байту номеров страниц
![]() |
Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
|
| ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
| [216.73.216.156] |
|
|
Правила раздела:
| Страницы: (495) « Первая ... 201 202 [203] 204 205 ... 494 495 ( Перейти к последнему сообщению ) |
Delphi vs C++ vs C#
, ну и Java немножко, где-то ближе к старшему байту номеров страниц
|
Сообщ.
#3031
,
|
|
|
|
Не знаю, как там во всяких Лиспах, а в C++ класс - это не магическая палка, а обычный земной инструмент, который можно при большом желании разобрать.
|
|
Сообщ.
#3032
,
|
|
|
|
|
Сообщ.
#3033
,
|
|
|
|
Цитата korvin @ Конечно. Собственно речь шла о том, что если захочешь, то сделаешь(пусть и не по стандарту, а для конкретного компилятора). Язык не может защитить от глупости или преднамеренных хаков. Кто-то с этим спорит? Я только не могу понять одно: зачем в шарпе нужно было вообще разрешать доступ к приватным полям? Едрить... А как классы связаны с вашем незнанием языка? |
|
Сообщ.
#3034
,
|
|
|
|
Цитата D_KEY @ Внутри одной - да. Раскиданные по десяти - нет.Да хоть десять, если все поля расположены в одной секции - порядок расположения гарантирован. Цитата The order of allocation of nonstatic data members separated by an access-specifier is unspecified. |
|
Сообщ.
#3035
,
|
|
|
|
Цитата D_KEY @ Да хоть десять, если все поля расположены в одной секции - порядок расположения гарантирован. Гррррр! ![]() ![]() class A { int x; public: int y; }; В памяти сначала может идти x, а может и наоборот. ![]() ![]() class A { public: int x; public: int y; }; Если честно, не помню считается ли это одной секцией... Но это не важно! Если одна, то в памяти будет x, y, что может не совпадать с вариантом y, x первого кода. Если это две секции, то опять у нас два варианта. Так понятно? |
|
Сообщ.
#3036
,
|
|
|
|
Цитата MyNameIsIgor @ Это не имеет значения. Имеет значение, что x и y разделены спецификатором public Если честно, не помню считается ли это одной секцией... |
|
Сообщ.
#3037
,
|
|
|
|
Цитата MyNameIsIgor @ Цитата D_KEY @ Нет. Просто не вижу, где бы тут было нарушение ODR с точки зрения формального определения. Хотя, скорее всего, ты прав, а мне должно быть стыдно Прекрати. Obj скомпилирован с одним ашником, а твой cpp - с другим (даже если ты "изменил" его с поммощью препроцессора). В результате у тебя линкуется два объектника, которые скомпилированы с двумя разными типами с однинаковым названием. Это не нарушение ODR? На уровне здравого смысла нарушает. А вот формально. Скорее всего тоже. В любом случае, это не приемлемый способ. Цитата Порядок секций не гарантируется! Только порядок полей внутри секций Я знаю. Цитата Так пусть он переставляет местами секции. Все поля находятся в одной. Если ты меняешь private на public, то компилятор вправе переставить секции местами, если ему так удобнее. |
|
Сообщ.
#3038
,
|
|
|
|
Цитата trainer @ нет. Ну, вот и чудненько, у нас тут тогда зависит от того, как компилятор расположит поля не только в первом случае, но и во втором тоже... |
|
Сообщ.
#3039
,
|
|
|
|
Цитата trainer @ Цитата D_KEY @ Внутри одной - да. Раскиданные по десяти - нет.Да хоть десять, если все поля расположены в одной секции - порядок расположения гарантирован. Цитата The order of allocation of nonstatic data members separated by an access-specifier is unspecified. Я знаю и с этим не спорю. Но у нас одна секция с полями. |
|
Сообщ.
#3040
,
|
|
|
|
Цитата D_KEY @ Так пусть он переставляет местами секции. Все поля находятся в одной. Поменяется их смещение относительно "начала" экземпляра. Неужели это не понятно? |
|
Сообщ.
#3041
,
|
|
|
|
Цитата MyNameIsIgor @ Цитата D_KEY @ Да хоть десять, если все поля расположены в одной секции - порядок расположения гарантирован. Гррррр! ![]() ![]() class A { int x; public: int y; }; В памяти сначала может идти x, а может и наоборот. ![]() ![]() class A { public: int x; public: int y; }; Если честно, не помню считается ли это одной секцией... Но это не важно! Если одна, то в памяти будет x, y, что может не совпадать с вариантом y, x первого кода. Если это две секции, то опять у нас два варианта. Так понятно? Я с этим случаем не спорил |
|
Сообщ.
#3042
,
|
|
|
|
Цитата D_KEY @ Если между полями есть спецификатор public - порядок их следования не определен. Ты гарантируешь, что между полями произвольного класса не будет никаких спецификаторов? Но у нас одна секция с полями. |
|
Сообщ.
#3043
,
|
|
|
|
Цитата D_KEY @ Я знаю и с этим не спорю. Но у нас одна секция с полями. Ах, так у тебя ещё и секция с полями одна Слушай, не многовато ли оговорок? Одни если, если, если... А если завтра инопланетяне нападут? |
|
Сообщ.
#3044
,
|
|
|
|
Цитата MyNameIsIgor @ Цитата D_KEY @ Так пусть он переставляет местами секции. Все поля находятся в одной. Поменяется их смещение относительно "начала" экземпляра. Неужели это не понятно? Почему? На выравнивание спецификаторы не влияют, и если секция с полями одна, то все будет ок. Впрочем, мы обсуждаем какие-то малоинтересные вещи. Добавлено Цитата trainer @ Цитата D_KEY @ Если между полями есть спецификатор public - порядок их следования не определен. Ты гарантируешь, что между полями произвольного класса не будет никаких спецификаторов?Но у нас одна секция с полями. Нет конечно. |
|
Сообщ.
#3045
,
|
|
|
|
Цитата D_KEY @ Почему? На выравнивание спецификаторы не влияют, и если секция с полями одна, то все будет ок. Впрочем, мы обсуждаем какие-то малоинтересные вещи. Ну, так тебе спасибо Я говорил про легальные способы изменения приватных полей, а ты приводишь грязные хаки, а потом заявляешь, что это не интересно... Ну, тебе виднее... |