|
4340 / 1509 / 101
Регистрация: 12.04.2009
Сообщений: 2,342
|
||||||
Вопрос про список инициализации19.09.2009, 22:02. Показов 3643. Ответов 15
Метки нет (Все метки)
0
|
||||||
| 19.09.2009, 22:02 | |
|
Ответы с готовыми решениями:
15
Map и список инициализации
|
|
2924 / 1274 / 114
Регистрация: 27.05.2008
Сообщений: 3,465
|
|
| 19.09.2009, 22:55 | |
|
Правда. С одной оговоркой: "значение по умолчанию (-858993460)" - это особенность мелкомягкого компилятора в режиме отладки, поэтому в общем случае переменная i в классе A изначально будет содержать просто "мусор"; а вот какой именно - зависит от массы факторов.
0
|
|
|
146 / 146 / 32
Регистрация: 26.10.2008
Сообщений: 782
|
|
| 19.09.2009, 22:57 | |
|
Неправда. И в первом и во втором случае сначала значение стандартное, а при инициализации и то и другое становятся равными 1.
Добавлено через 1 минуту Не заметил сообщение CheshireCat, когда писал. Можете убедиться в дебаггере.
0
|
|
|
4340 / 1509 / 101
Регистрация: 12.04.2009
Сообщений: 2,342
|
|
| 19.09.2009, 22:58 [ТС] | |
|
Значит ли это, что она в первом случае она инициализируется два раза, а во втором один?
Дебагер показывает, то, что в первом случае i=-858993460 -> f10 -> i=1; а во втором сразу i=1
0
|
|
|
146 / 146 / 32
Регистрация: 26.10.2008
Сообщений: 782
|
||
| 19.09.2009, 23:04 | ||
|
Не знаю, можно ли значение по умолчанию считать инициализацией, но они инициализируются одинаковое количество раз.
Добавлено через 3 минуты
0
|
||
|
4340 / 1509 / 101
Регистрация: 12.04.2009
Сообщений: 2,342
|
||||||
| 19.09.2009, 23:08 [ТС] | ||||||
|
ээ надо просто сделать так чтобы посмотреть по шагам
0
|
||||||
|
146 / 146 / 32
Регистрация: 26.10.2008
Сообщений: 782
|
|
| 19.09.2009, 23:11 | |
|
Именно по шагам я делал.
0
|
|
|
быдлокодер
1724 / 911 / 106
Регистрация: 04.06.2008
Сообщений: 5,705
|
|
| 20.09.2009, 03:01 | |
|
Ребята, подождите.
Я так понимаю. Если есть конструктор инициализации прописанный программистом, то конструктор по умолчанию вызываться НЕ БУДЕТ. (Так у меня написано в книге) В приведённом примере имеется авторский конструктор инициализации. Значит, при создании объекта будет вызван именно он и переменной i будет присвоено значеие 1 Один раз. Или нет?
0
|
|
|
4340 / 1509 / 101
Регистрация: 12.04.2009
Сообщений: 2,342
|
|
| 20.09.2009, 03:18 [ТС] | |
|
Там два разных класса
0
|
|
|
быдлокодер
1724 / 911 / 106
Регистрация: 04.06.2008
Сообщений: 5,705
|
|
| 20.09.2009, 04:14 | |
|
Да я вижу. Моё рассуждение относится к любому из классов вообще.
К примеру. взять класс А. Авторский конструктор есть? Есть. Он вызывается? Вызывается. Вызывается ли какой-то другой? НЕТ. Переменная i инициализируется единцей? Да. Один раз? Да. Вот о чём речь.
0
|
|
|
2924 / 1274 / 114
Регистрация: 27.05.2008
Сообщений: 3,465
|
|||||||
| 20.09.2009, 11:04 | |||||||
|
А проверить?
0
|
|||||||
|
Псевдо программист
192 / 113 / 37
Регистрация: 19.09.2009
Сообщений: 303
|
|
| 20.09.2009, 11:13 | |
|
В любом случае под переменную a сначала выделится память. Таким образом после обьявления а содержит всяких хлам, и уже в результате выполнения конструктора а = 1;
0
|
|
|
146 / 146 / 32
Регистрация: 26.10.2008
Сообщений: 782
|
||||||||||||
| 20.09.2009, 11:30 | ||||||||||||
В случае класса B в конструкторе i инициализируется раньше, чем остальные переменные, если бы они были и были инициализированны в {}.
0
|
||||||||||||
|
2924 / 1274 / 114
Регистрация: 27.05.2008
Сообщений: 3,465
|
|
| 20.09.2009, 11:44 | |
|
Это заблуждение. "если смотреть в дебаггере, когда там ещё не дошёл до места объявления ни a, ни b, оба этих объекта....." - так вот, когда еще не дошел до места объявления, еще ни a, ни b просто не существуют (хотя, возможно, компилятор и зарезервировал уже какую-то память для их последующего "существования"), и что там показывает дебагер для несуществующих объектов.... - остается на совести разработчиков этого самого дебагера.
0
|
|
|
146 / 146 / 32
Регистрация: 26.10.2008
Сообщений: 782
|
||
| 20.09.2009, 12:18 | ||
|
Ну, тогда ответ на вопрос:
0
|
||
|
2924 / 1274 / 114
Регистрация: 27.05.2008
Сообщений: 3,465
|
|
| 20.09.2009, 13:31 | |
|
Нет, тут как раз ничего спорного нет.
Согласно Стандарту, при конструировании сложного объекта выполняются следующие действия: 1. сначала конструируются все базовые классы - в том порядке, в котором они указаны в списке наследования; для каждого из них также выполняется конструирование в точно таком же порядке; 2. затем конструируются все члены класса в том порядке, в котором они указаны в объявлении класса; если член класса указан в списке инициализации, для него вызывается соответствующий конструктор, иначе вызывается конструктор по умолчанию; 3. и наконец, выполняется тело конструктора объекта. После выполнения этих действий объект начинает "существовать". Как происходит конструирование объектов класса A: - поскольку базовых классов (суперклассов) у него нет, то п.1 пропускается; - конструируется член i. Поскольку он не указан в списке инициализации, то для него вызывается конструктор по умолчанию, а поскольку это POD-тип, то default ctor у него пустой и ничего не делает - вменяемый компилятор его просто отимизирует (выкидывает из кода). Непосредственно начиная с этого момента, у нас уже существует "живой" член i, имеющий некое случайное значение. - наконец, выполняется тело конструктора класса A. В момент начала выполнения тела конструктора член i имеет какое-то случайное значение, и только в теле конструктора члену i присваивается значение 1. Как конструируется объект класса B: - поскольку базовых классов (суперклассов) у него нет, то п.1 пропускается; - конструируется член i. Поскольку он указан в списке инициализации и это POD-тип, то для него выполняется инициализация сразу заданным значением. Непосредственно начиная с этого момента, у нас уже существует "живой" член i, имеющий строго заданное значение 1. - наконец, выполняется тело конструктора класса B (пустое). В момент начала выполнения тела конструктора член i уже имеет значение 1 - как и было задано в списке инициализации. Все это как раз и видно в тестовом коде.
0
|
|
| 20.09.2009, 13:31 | |
|
Помогаю со студенческими работами здесь
16
Список инициализации конструктора
Конструктор. Наследование. Список инициализации
Как правильно написать список инициализации Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога
Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
|
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование
. \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json>
Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом.
# Check if. . .
|
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так:
https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347
Основана на STM32F303RBT6.
На борту пять. . .
|
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
|
|
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу,
и светлой Луне.
В мире
покоя нет
и люди
не могут жить в тишине.
А жить им немного лет.
|
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила»
«Время-Деньги»
«Деньги -Пуля»
|
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога
Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
|
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога
Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
|