STRUCT st; st = STRUCT();
От: Аноним  
Дата: 25.06.04 09:08
Оценка:
Добрый день!
Навеяло топиком про обнуления структур. Не могу понять смысл записи:


    STRUCT st;
    st = STRUCT();


Вроде и в первой строке и во второй вызывается конструктор, но в первом случае
обнуления не происходит, а во втором оно есть. Только что проверил.
Кому не лень, поясните пожалуйста.
Спасибо.
Re: STRUCT st; st = STRUCT();
От: davenger  
Дата: 25.06.04 09:15
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Добрый день!

А>Навеяло топиком про обнуления структур. Не могу понять смысл записи:


А>
А>    STRUCT st;
А>    st = STRUCT();

А>


А>Вроде и в первой строке и во второй вызывается конструктор, но в первом случае

А>обнуления не происходит, а во втором оно есть. Только что проверил.
А>Кому не лень, поясните пожалуйста.
А>Спасибо.

Если у тебя STRUCT это POD-тип, то в первом строке конструктор не вызывается.
А во второй сначала создаётся временная структура, для которой производится обнуление, а потом её содержимое копируется в st.
Re[2]: STRUCT st; st = STRUCT();
От: Шахтер Интернет  
Дата: 26.06.04 00:44
Оценка:
Здравствуйте, davenger, Вы писали:

D>Здравствуйте, Аноним, Вы писали:


А>>Добрый день!

А>>Навеяло топиком про обнуления структур. Не могу понять смысл записи:


А>>
А>>    STRUCT st;
А>>    st = STRUCT();

А>>


А>>Вроде и в первой строке и во второй вызывается конструктор, но в первом случае

А>>обнуления не происходит, а во втором оно есть. Только что проверил.
А>>Кому не лень, поясните пожалуйста.
А>>Спасибо.

D>Если у тебя STRUCT это POD-тип, то в первом строке конструктор не вызывается.


У POD типов НЕТ конструкторов.
... << RSDN@Home 1.1.0 stable >>
В XXI век с CCore.
Копай Нео, копай -- летать научишься. © Matrix. Парадоксы
Re: STRUCT st; st = STRUCT();
От: Андрей Тарасевич Беларусь  
Дата: 26.06.04 05:43
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Навеяло топиком про обнуления структур. Не могу понять смысл записи:



А>
А>    STRUCT st;
А>    st = STRUCT();

А>


А>Вроде и в первой строке и во второй вызывается конструктор, но в первом случае

А>обнуления не происходит, а во втором оно есть. Только что проверил.

Ну так а где определение саого типа 'STRUCT'? От него много чего зависит.

Если считать, что 'STRUCT' — POD тип, то конструктор тут не вызывается ни в первом, ни во втором случае. Семантика объявления без инициализатора и семантика инициализатора '()' для таких типов описывается без привлечения каких-либо конструкторов. Просто говорится, что в первом случае нет никакой инициализации, а во втором случае делается инициализация по-умолчанию, которая для такого объекта выливается в инициализацию нулями.
Best regards,
Андрей Тарасевич
Re[3]: STRUCT st; st = STRUCT();
От: Андрей Тарасевич Беларусь  
Дата: 26.06.04 05:44
Оценка:
Здравствуйте, Шахтер, Вы писали:

D>>Если у тебя STRUCT это POD-тип, то в первом строке конструктор не вызывается.


Ш>У POD типов НЕТ конструкторов.


У классов всегда есть конструкторы. Даже если они POD-классы.
Best regards,
Андрей Тарасевич
Re[4]: STRUCT st; st = STRUCT();
От: Шахтер Интернет  
Дата: 26.06.04 16:25
Оценка:
Здравствуйте, Андрей Тарасевич, Вы писали:

АТ>Здравствуйте, Шахтер, Вы писали:


D>>>Если у тебя STRUCT это POD-тип, то в первом строке конструктор не вызывается.


Ш>>У POD типов НЕТ конструкторов.


АТ>У классов всегда есть конструкторы. Даже если они POD-классы.


Да. Это я вчера перебрал шампьянского.
... << RSDN@Home 1.1.0 stable >>
В XXI век с CCore.
Копай Нео, копай -- летать научишься. © Matrix. Парадоксы
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.