|
|
|
инициализация структуры
|
|||
|---|---|---|---|
|
#18+
обнулить все поля структуры можно, вроде бы как, таким образом: Код: plaintext 1. Код: plaintext 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.12.2007, 16:22:32 |
|
||
|
инициализация структуры
|
|||
|---|---|---|---|
|
#18+
Еще интересен сам механизм такой инициализации, как я понял, операторы присваивания при ней не вызываются, и происходит это после инициализации конструктором структуры. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.12.2007, 16:58:06 |
|
||
|
инициализация структуры
|
|||
|---|---|---|---|
|
#18+
И еще, интересно мнение спецов :), если в структуру включены объекты, то обнуление ее типа memset() как-то уже не совсем справедливо, это может нарушить состояние включенных объектов, которые могут инициализироваться не обязательно нулями для корректной работы. Можно сделать в структуре инициализирующий конструктор, но тогда смысл считать ее структурой, не проще ли относиться к ней как классу. Т.е. где пролегает эта грань, между структурой и классом для правильного программирования? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.12.2007, 17:03:17 |
|
||
|
инициализация структуры
|
|||
|---|---|---|---|
|
#18+
TubrikИ еще, интересно мнение спецов :), если в структуру включены объекты, то обнуление ее типа memset() как-то уже не совсем справедливо, это может нарушить состояние включенных объектов, которые могут инициализироваться не обязательно нулями для корректной работы. Не то что не совсем справедливо, а безобразие. TubrikМожно сделать в структуре инициализирующий конструктор, но тогда смысл считать ее структурой, не проще ли относиться к ней как классу. Т.е. где пролегает эта грань, между структурой и классом для правильного программирования? Баян, было несколько месяцев назад ищи. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.12.2007, 17:09:57 |
|
||
|
инициализация структуры
|
|||
|---|---|---|---|
|
#18+
imho класс - объект, составляющие которого, как правило, логически связаны между собой, структура, же это (опять же ;) ) как правило, просто сборище друг от друга не зависящих объектов, с public доступом для всех и вся. Вообще, конечно, все на усмотрение разработчика... -------------------------------------------------------------- [не претендую на уникальность] ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.12.2007, 17:10:35 |
|
||
|
инициализация структуры
|
|||
|---|---|---|---|
|
#18+
Cerebrumimho класс - объект, составляющие которого, как правило, логически связаны между собой, структура, же это (опять же ;) ) как правило, просто сборище друг от друга не зависящих объектов, с public доступом для всех и вся. Вообще, конечно, все на усмотрение разработчика... Сборище - это мусор, а не структура. ;) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.12.2007, 17:14:54 |
|
||
|
инициализация структуры
|
|||
|---|---|---|---|
|
#18+
я предпочитаю чтобы структуры были POD ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.12.2007, 17:18:02 |
|
||
|
инициализация структуры
|
|||
|---|---|---|---|
|
#18+
Голенков Владимиря предпочитаю чтобы структуры были POD Для агрегатной инициализации структура не обязательно должна быть POD, главное, чтобы у нее было конструкторов и еще кое-чего ;) : автор 8.5.1 Aggregates [dcl.init.aggr] An aggregate is an array or a class (clause 9) with no user-declared constructors (12.1), no private or pro- 1 tected non-static data members (clause 11), no base classes (clause 10), and no virtual functions (10.3). Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.12.2007, 17:32:16 |
|
||
|
инициализация структуры
|
|||
|---|---|---|---|
|
#18+
Голенков Владимиря предпочитаю чтобы структуры были POD согласен, короче: если структура не выходит за рамки С. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.12.2007, 17:34:24 |
|
||
|
инициализация структуры
|
|||
|---|---|---|---|
|
#18+
Tubrikобнулить все поля структуры можно, вроде бы как, таким образом: Код: plaintext 1. Код: plaintext 1. Для того чтобы корректно "обнулить" поля структуры мы опираемся на следующее утверждение стандарта: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. Следовательно, если мы хотим просто "обнулить" структуру, то пишем: Код: plaintext 1. Только MS компиляторы (VC6 точно, остальные не знаю) не понимают empty initializer-list :( ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.12.2007, 17:38:08 |
|
||
|
инициализация структуры
|
|||
|---|---|---|---|
|
#18+
maXmo Голенков Владимиря предпочитаю чтобы структуры были POD согласен, короче: если структура не выходит за рамки С. А зачем себя так ограничивать, в таком свободном языке как C++ ;) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.12.2007, 17:40:05 |
|
||
|
инициализация структуры
|
|||
|---|---|---|---|
|
#18+
Tubrik wrote: > st s({0}); > > почему-то не работатет, почему? Конструктору присваивания в качестве параметра надо st& или const st&, если конструктор не определен и используется дефолтный. Тип выражения "{0}" неизвестен. Компилиться будет вот так (g++, на msvc не факт, что будет): Код: plaintext 1. вопросы? -- We are all going to hell and I'm driving the bus Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.12.2007, 17:46:30 |
|
||
|
инициализация структуры
|
|||
|---|---|---|---|
|
#18+
Анатолий ШироковА зачем себя так ограничивать, в таком свободном языке как C++ ;)ибо нефиг :) Либо полный С, либо полный С++/ООП. Третьего не дано. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.12.2007, 17:54:47 |
|
||
|
инициализация структуры
|
|||
|---|---|---|---|
|
#18+
maXmo Анатолий ШироковА зачем себя так ограничивать, в таком свободном языке как C++ ;)ибо нефиг :) Либо полный С, либо полный С++/ООП. Третьего не дано. "Это был системный аналитик. Он дал исчерпывающий ответ, из которого мы ничего полезного для себя почерпнуть не можем" :D ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.12.2007, 18:00:24 |
|
||
|
инициализация структуры
|
|||
|---|---|---|---|
|
#18+
Выходит: 1. Для структуры не создается конструктор по-умолчанию, как и конструктор копирования. 1. Список инициализации работает только для структур, где нет явно созданного конструктора. 3. При отсутствии конструктора, для вложенных в структуру переменных классовых типов, их конструкторы все же вызываются. Akh Не то что не совсем справедливо, а безобразие. а как тогда быстро и кратко обнулить структуру типа : Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.12.2007, 18:51:31 |
|
||
|
инициализация структуры
|
|||
|---|---|---|---|
|
#18+
maXmo Анатолий ШироковА зачем себя так ограничивать, в таком свободном языке как C++ ;)ибо нефиг :) Либо полный С, либо полный С++/ООП. Третьего не дано. Борис, ты не ПРАВ!(с) А вот создатели STL с вами были не согласны и наворотили такого из структур и классов..... Так что class == struct и никак не иначе ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.12.2007, 18:52:42 |
|
||
|
инициализация структуры
|
|||
|---|---|---|---|
|
#18+
наворотили – ну и флаг им в руки, кто это воротилово разгребать будет? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.12.2007, 19:07:17 |
|
||
|
инициализация структуры
|
|||
|---|---|---|---|
|
#18+
просто скажите кто как обнуляет структуру? я всегда юзал memset(), и, мне кажется ничего плохого в этом нет, если уверен, что она (структура) всегда будет содержать в себе только встроенные типы данных ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.12.2007, 19:14:58 |
|
||
|
инициализация структуры
|
|||
|---|---|---|---|
|
#18+
maXmoнаворотили – ну и флаг им в руки, кто это воротилово разгребать будет? Да они свой флаг несут высоко и долго, многим бы так А от того что ты считаешь что struct это POD, она не поменяет свой сущности. Tubrik просто скажите кто как обнуляет структуру? я всегда юзал memset(), и, мне кажется ничего плохого в этом нет, если уверен, что она (структура) всегда будет содержать в себе только встроенные типы данных Можно все что не запрещено и что не вводит в заблуждение. В данном случае ни того ни другого нет ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.12.2007, 19:26:29 |
|
||
|
инициализация структуры
|
|||
|---|---|---|---|
|
#18+
Короче) достал из завалов учебник, порывшись, все-таки оформил для себя понимание структуры исходя из след. двух принципов: 1. Структура является объединением простых переменных. 2. Класс является объединением данных и функция для работы над этими данными (ну и не только). Сделал для себя правило: 1. Хранить в структуре только простые типы данных. 2. Даже не думать манипулировать любыми данными через структуру (т.е. никаких методов внутри). 3. п.1. позволяет беспечно использовать memset() и ему подобные. 4. Если есть необходимость постоянно однообразно изменять данные в структуре, сделать для этого специальную ф-ию. Если кратко: структура - это данные и ничего больше! аж легче стало =) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.12.2007, 19:33:44 |
|
||
|
инициализация структуры
|
|||
|---|---|---|---|
|
#18+
Tubrikа как тогда быстро и кратко обнулить структуру типа : Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. ? Вы выборочно читаете ленту? Я уже ответил на этот вопрос выше: Код: plaintext ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.12.2007, 19:41:38 |
|
||
|
инициализация структуры
|
|||
|---|---|---|---|
|
#18+
и сразу же нарушил свое же правило, добавив в структуру поля std::string =) в связи с чем внес поправку: Структура - это объединение любых типов данных, без каких-либо возможных манипуляций над данными, как внутренними, так и внешними. (а чем там будут эти данные заниматься внутри структуры - это уже не ее проблемы) Для повторяющихся обнулений и др. переинициализаций использовать внешние ф-ии. Вроде все стыкуется, жаль только memset уже не применишь. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.12.2007, 19:41:57 |
|
||
|
инициализация структуры
|
|||
|---|---|---|---|
|
#18+
Анатолий Широков Вы выборочно читаете ленту? Я уже ответил на этот вопрос выше: Код: plaintext нет, стараюсь читать внимательно, но я спросил "как обнулить", а не "инициализировать", вы таким образом можете обнулить ее в любом месте кода? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.12.2007, 19:43:44 |
|
||
|
|

start [/forum/topic.php?fid=57&msg=34992055&tid=2027678]: |
0ms |
get settings: |
7ms |
get forum list: |
18ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
183ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
63ms |
get tp. blocked users: |
1ms |
| others: | 187ms |
| total: | 475ms |

| 0 / 0 |
