Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[3.145.174.57] |
|
Страницы: (14) « Первая ... 9 10 [11] 12 13 ... Последняя » все ( Перейти к последнему сообщению ) |
Сообщ.
#151
,
|
|
|
Цитата shm @ он же третий. Тогда почему ты не могу внятно ответить про вывод? Киля просто признайся, что ты был не прав и все. Выглядишь сейчас смешно. В чем я конкретно не прав, поясни плз? Если ты мне пояснишь - в чем моя ошибка, я признаю, что я не прав. Посмотри на свой третий пример, и на : Цитата KILLER @ Then, non-static data members shall be initialized in the order they were declared in the class definition Добавлено И пожалуйста, когда будешь объяснять мне - в чем я не прав, поясни, почему мой пример со статической функцией валица на этапе исполнения? Я не понимаю - я серьезно тебе говорю. По твоей логике - оно должно работать, я же память для переменной выделяю, разве нет? |
Сообщ.
#152
,
|
|
|
Киля. Я тебе перевожу дословно: не статические члены класса в списке инициализации инициализируются в порядке их декларации (т.е. определения в классе, и независимо от их расположения в списке инициализации).
|
Сообщ.
#153
,
|
|
|
Цитата shm @ Киля, ты вбей в гугл трайнслейт то, что я выделил жирным шрифтом в моей первой цитате Стандарта. Я тебе и так могу сказать, не смотря на список mem-initializers. Добавлено Цитата shm @ Киля. Я тебе перевожу дословно: члены класса в списке инициализации специализируются в порядке их декларации (т.е. определения в классе, и независимо от их расположения в списке инициализации). Почему мой пример со статической функцией валица - на этапе исполнения? Добавлено Цитата shm @ Я тебе перевожу дословно: члены класса в списке инициализации специализируются в порядке их декларации (т.е. определения в классе, и независимо от их расположения в списке инициализации). Что конкретно ты перевел? |
Сообщ.
#154
,
|
|
|
Разжевываю: у тебя порядок объявления переменных такой: int a1; B* b1; Значит согласно процитированному тобой же Стандарту, в списке инициализации сперва инииализируется a1, потом b1 независимо от их фанатического расположения в этом списке. далее: : a1(Calculate(b1)), //вот это сработает первым, как я и написал выше, но в этот момент b1 еще не инициализирован b1(new B()), a3(5) Поменяй определение местами т.е.: B* b1; int a1; если конечно ты там других ошибок не понаделал... Добавлено Киля, ну не включай дурачка, а. Ну глупо выглядишь. |
Сообщ.
#155
,
|
|
|
KILLER, shm прав, члены класса инициируются в том порядке, в котором они перечислены в классе. Порядок инициализаторов в заголовке конструктора если и имеет значение, то только тогда, когда для инициализации используются ранее инициализированные поля класса. Поэтому большинство компиляторов выдают тебе диагностическое сообщение, если этот порядок отличается. Не потому, что это ошибка, а потому, что записывая инициализаторы не в том порядке ты сам себя можешь ввести в заблуждение. Хотя и ошибка там может быть.
|
Сообщ.
#156
,
|
|
|
Цитата shm @ Поменяй определение местами т.е.: Ты не понимаешь - в моем примере, который ты сейчас пытаешься понять b1 вызывается раньше, чем инициализируется. Ты не смотри на то, что порядок объявления переменных в классе соответствует порядку инициализации. У меня на момент инициализации a1, уже должен передаваться инициализированный и созданный объект b1. Добавлено Цитата amk @ KILLER, shm прав, члены класса инициируются в том порядке, в котором они перечислены в классе. Порядок инициализаторов в заголовке конструктора если и имеет значение, то только тогда, когда для инициализации используются ранее инициализированные поля класса. Поэтому большинство компиляторов выдают тебе диагностическое сообщение, если этот порядок отличается. Не потому, что это ошибка, а потому, что записывая инициализаторы не в том порядке ты сам себя можешь ввести в заблуждение. Хотя и ошибка там может быть. Хорошо, пусть будет по вашему. Пускай - я не прав. Я признаю. Ок. Поясните мне тогда - почему передавая b1 - у меня нет объекта, хотя я его создаю? |
Сообщ.
#157
,
|
|
|
amk, я уму это уже 5ю(!) страницу пытаюсь объяснить, скорее всего это бесполезно.
Добавлено Цитата KILLER @ Ты не понимаешь - в моем примере, который ты сейчас пытаешься понять b1 вызывается раньше, чем инициализируется. Цитата KILLER @ Ты не смотри на то, что порядок объявления переменных в классе соответствует порядку инициализации. Ты уже сам себе противоречишь |
Сообщ.
#158
,
|
|
|
Ведь порядок инициализации - значения не имеет. Значит я ожидаю корректного выполнения программы.
Добавлено Цитата shm @ Ты уже сам себе противоречишь Нет, не противоречу. b1 - инициализируется после a1, но b1 передается в функцию, которая инициализирует a1. Ты можешь мне подробно пояснить - в чем тут косяк или нет? |
Сообщ.
#159
,
|
|
|
Цитата KILLER @ Поясните мне тогда - почему передавая b1 - у меня нет объекта, хотя я его создаю? Потому, что у тебя b1 объявляется позже переменной a1, которую ты в этом месте инициализируешь. Добавлено Цитата KILLER @ Значит я ожидаю корректного выполнения программы. Какое он может быть корректное, если на момент инициализации а1, б1 не инициализирован по определению? |
Сообщ.
#160
,
|
|
|
Какая разница что я b1 инициализирую после того, как ее передал в a1 через функцию ? Ведь не имеет значения в каком порядке я что инициализирую - у меня по факту сначало вызовется Calculate, прежде чем будет инициализирован a1, соответственно я ожидаю что b1 - на этом этапе уже будет инициализирован. Разве нет?
|
Сообщ.
#161
,
|
|
|
Цитата KILLER @ Нет, не противоречу. b1 - инициализируется после a1, но b1 передается в функцию, которая инициализирует a1. Ну. А что тогда спрашиваешь? |
Сообщ.
#162
,
|
|
|
Цитата shm @ Потому, что у тебя b1 объявляется позже переменной a1, которую ты в этом месте инициализируешь. Так ведь разницы нет - в каком порядке инициализируются члены класса Добавлено Цитата shm @ Какое он может быть корректное, если на момент инициализации а1, б1 не инициализирован по определению? Как не инициализирован, если ты мне только что стандартом тыкал? Добавлено Цитата shm @ Ну. А что тогда спрашиваешь? Я и спрашиваю потому, что я понимаю так, чо на момент инициализации а1, b1 не инициализирована, а ты мне доказываешь, что не имеет значения в каком порядке все это вызывается в конструкторе, так как оно уже на этом этапе должно быть инициализировано. |
Сообщ.
#163
,
|
|
|
Цитата KILLER @ Какая разница что я b1 инициализирую после того, как ее передал в a1 через функцию ? Там в этой самой функции есть обращение к виртуальной функции, которая не будет работать по невалидному указателю. Добавлено Цитата KILLER @ Так ведь разницы нет - в каком порядке инициализируются члены класса Нет. Цитата KILLER @ Как не инициализирован, если ты мне только что стандартом тыкал? Так а1 раньше б1 объявлено? - раньше. Тогда, что тебя удивляет, что на момент инициализации а1 б1 не инициализирована. |
Сообщ.
#164
,
|
|
|
Цитата shm @ Там в этой самой функции есть обращение к виртуальной функции, которая не будет работать по невалидному указателю. Да причем тут невалидный указатель? Я же под нее память выделяю. Оно уже на момент передачи в Calculate по вашей логике должно быть создано. |
Сообщ.
#165
,
|
|
|
|