Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 19.04.2012, 10:03   #1
akhomyak
Новичок
Джуниор
 
Регистрация: 19.04.2012
Сообщений: 1
Вопрос Вопрос по value-initialize структуры без конструктора

Народ, поясните, плз, почему следующий код

Код:
struct A
{
    int a;
};
 
struct D: A
{
    int c;
};
 
int main(int argc, char* argv[])
{
    std::cout << "D().a == " << D().a << std::endl;
    std::cout << "D().c == " << D().c << std::endl;
 
    return 0;
}
в MS студии 2003 выдаёт

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
akhomyak вне форума Ответить с цитированием
Старый 19.04.2012, 10:47   #2
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

2003 студия?
вы бы еще древнее студию взяли.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 19.04.2012, 12:25   #3
Rififi
Старожил
 
Регистрация: 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
Rififi вне форума Ответить с цитированием
Старый 19.04.2012, 12:51   #4
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

ну как бы студия никогда не соответствовала стандарту на 100%.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 19.04.2012, 16:25   #5
EUGY
Форумчанин
 
Аватар для EUGY
 
Регистрация: 11.07.2010
Сообщений: 914
По умолчанию

Внимательно прочитал это пункты, понял что речь идет об этом:
Код:
struct A
{
	int a;
};

struct D
{
	A aa;
	int c;
	D() :aa(), c()
	{

	}
};

int main()
{
	D dd;
	return 0;
}
Вот у структуры A нет явного конструктора,
И ее инициализация способом T() в структуре D приводит к тому, что члены структуры A инициализируются по умолчанию.
Так же у типа int c; заданного в структуре D разумеется нет явного конструктора.
И инициализация c() is value-initialized.

PS. так что и VS2003 и VS2010 соответствуют этим пунктам стандарта

PPS Насчет иниц. базового класса все также:
Код:
struct A
{
	int a;
};
struct D : public A
{
	D() :A() // A::a - инициализируется нулем
	{
	}
};

Последний раз редактировалось EUGY; 19.04.2012 в 16:55.
EUGY вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
создание 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