|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
19.04.2012, 10:03 | #1 |
Новичок
Джуниор
Регистрация: 19.04.2012
Сообщений: 1
|
Вопрос по value-initialize структуры без конструктора
Народ, поясните, плз, почему следующий код
Код:
D().a == 4260508 // т.е., не 0 D().c == 4220576 // т.е., не 0 не смотря на то, что согласно пунктов 5.2.3.2 и 8.5.5 стандарта C++03, не статические мемберы и базовые классы должны быть value-initialize ("if T is a non-union class type without a user-declared constructor, then every non-static data member and base-class component of T is value-initialized"), т.е., в данном случае, по идее, должны иметь D().a == 0 D().c == 0 |
19.04.2012, 10:47 | #2 |
Старожил
Регистрация: 28.01.2009
Сообщений: 21,000
|
2003 студия?
вы бы еще древнее студию взяли. Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел. Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите. |
19.04.2012, 12:25 | #3 |
Старожил
Регистрация: 19.08.2009
Сообщений: 2,119
|
Пепел Феникса
студия 2010 - ркзультат тот же самый. более того, зависит от опций командной строки (: cl -MTd -EHsc value_init.cpp cl -MT -EHsc value_init.cpp cl -MT -Ox -EHsc value_init.cpp все три компиляции выдают разные значения ((: gcc выдает нули: http://codepad.org/245eM2fF
А вы почему со мной не соглашаетесь, у вас что, импотенция? (c) ACE Valery
|
19.04.2012, 12:51 | #4 |
Старожил
Регистрация: 28.01.2009
Сообщений: 21,000
|
ну как бы студия никогда не соответствовала стандарту на 100%.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел. Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите. |
19.04.2012, 16:25 | #5 |
Форумчанин
Регистрация: 11.07.2010
Сообщений: 914
|
Внимательно прочитал это пункты, понял что речь идет об этом:
Код:
И ее инициализация способом T() в структуре D приводит к тому, что члены структуры A инициализируются по умолчанию. Так же у типа int c; заданного в структуре D разумеется нет явного конструктора. И инициализация c() is value-initialized. PS. так что и VS2003 и VS2010 соответствуют этим пунктам стандарта PPS Насчет иниц. базового класса все также: Код:
Последний раз редактировалось EUGY; 19.04.2012 в 16:55. |
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
создание mfc окна без конструктора ? | ololo-schoolboy | Visual C++ | 11 | 31.12.2010 22:07 |
Автоматическое преобразование на основе первого аргумента конструктора в вызов самого конструктора | jennya | Visual C++ | 8 | 03.10.2010 19:03 |
Вопрос про new и вызов конструктора | Gtx541 | Общие вопросы C/C++ | 5 | 20.05.2010 12:18 |
Failed to initialize client - unknown error | NITRUMIN | Софт | 7 | 11.08.2009 21:31 |
Вопрос без темы | RealSHELS | Свободное общение | 2 | 28.05.2008 18:24 |