|
|
|
инициализация структуры
|
|||
|---|---|---|---|
|
#18+
Анатолий Широков TubrikВот хочу, чтобы вы поразмышляли над сущность "ТОЧКА". +1 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.12.2007, 10:03:38 |
|
||
|
инициализация структуры
|
|||
|---|---|---|---|
|
#18+
Akh 1. Использовать memset() опасно, т.к. нет гарантии, что в какой-то момент в структуру не придется включить тип данных, который корректно сбрасывается не нулями. 2. Если в структуре много переменных представьте размер конструктора. К тому же конструктор лишит возможности использовать инициализацию типа = {x1, x2, ..., xn}, значит придется делать еще один конструктор, принимающий переменные, не меньшего размера. Насколько проще использовать вариант, предложенный Анатолием использовать глобальный объект: Код: plaintext 1. 2. 3. 4. 5. разве не так? Пускай даже эта ф-ия будет частью структуры, которую она обнуляет, но даже так будет кратче, чем использовать конструкторы. А если нужно "обнулять" не нулями, то можно аналогично: Код: plaintext 1. 2. 3. 4. 5. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.12.2007, 10:48:04 |
|
||
|
инициализация структуры
|
|||
|---|---|---|---|
|
#18+
Tubrik 1. Только для тех, где есть гарантия и используй. Кстати, в таких обычно и функций нет. 2. Одна крайнасть хороша, и другая хороша, а истина где-то посередине. Задачу можно решить разными способами, но для конкретного применения один способ более подходящий чем другой. Ты решил, что я против мемсета? Интересно где это я написал, вроде бы пишу обратное. ;) Еще к вопросу с большим количеством свойств можно добавить, что зачастую тут имеют место для жизни вложенные структуры, далее - иерархии наследования, далее - аналогичные данные - аналогичные структруры. 3. Ну, почему бы нет. Статическая зерроинициализация - тоже один из вариантов реализации, следовательно и он имеет право на жизнь. Кстати, опять же вопрос - а не отменят ее в будущем? Сомневаюсь, конечно, но могут придумать какой-нибудь спецификатор - zero, и если его не указать, то будет мусор. Врядли, конечно, - не такая уж она и напряжная. "К людям надо мягше, а на вопросы смотреть ширше". ;) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.12.2007, 11:09:11 |
|
||
|
инициализация структуры
|
|||
|---|---|---|---|
|
#18+
против memset() уже я сам стал :) вряд ли отменят или сделают что-то, что создаст серьезные проблемы при компиляции уже имеющихся сырцов, скорее могут добавить что-то новое думаю тема исчерпана, всем спасибо за участие) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.12.2007, 11:20:53 |
|
||
|
инициализация структуры
|
|||
|---|---|---|---|
|
#18+
Tubrik wrote: > Синтаксис С++ не обязывает писать имена переменных класса с "m_", > имена классов с большой буквы, и т.д. и т.п., но некоторые так делают, > и я в их числе. Ну а я не делаю :) Посмотри исодники Qt4 - там этого (ИМХО) маразма нет. Хотя *иногда* это может быть удобно. > Я не считаю, что "порчу" С++ или как-то ограничиваю его подвижность, а > просто выбираю более удобное слово для использования, чтобы более > точно (для себя) отразить замысел какого-то момента. Класс и структура идентичны (можешь считать, что struct - это хитрый макрос, который добавляет к классу public: доступ). Так что "замысел момента" ты придумываешь :). Ну и лично я считаю, что повесив правило на язык, ты лишаешь себя возможности наломать дров и научиться чему-то новому в результате. > Какой-то (не помню) автор книги по правилам "хорошего" тона в С++ > сказал, что этот язык слишком уж гибкий, чтобы не вводить подобные > ограничения. По-твоему все эти книги с рекомендациями можно смело в > топку? Да. Книгу берем, читаем, обдумываем позицию автора, соглашаемся или не соглашаемся с ней, затем берем что-то, что удобно/полезно лично мне, а все остальное посылаем нафиг. Гибкость не для создания правил, а для нахождения удобного тебе способа написания программ. А правила будут слишком статичными, тем более не для всех задач они подходят. Ну нельзя следовать одному какому-то "единственно верному" принципу. Так же нет смысла везде использовать ООП или "не ООП" программирование и т.д. и т.п. > против memset() уже я сам стал :) Знаешь, создатели Open Dynamics Engine (или похожей библиотеки) однажду ругались, что VC++ какой-то версии, при создании массива структур или классов, для каждой из них *вызывает* *пустой* конструктор, причем для каждого элемента (это если такой есть) или делает что-то похожее. Теперь прикинь количество вызовов функций при размере массива в несколько десятков миллионов элементов. Это вызывало тормоза. С memset'ом таких проблем не было. Вот и думай :) Все от ситуации зависит. -- We are all going to hell and I'm driving the bus Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.12.2007, 14:49:49 |
|
||
|
инициализация структуры
|
|||
|---|---|---|---|
|
#18+
ErV > против memset() уже я сам стал :) Знаешь, создатели Open Dynamics Engine (или похожей библиотеки) однажду ругались, что VC++ какой-то версии, при создании массива структур или классов, для каждой из них *вызывает* *пустой* конструктор, причем для каждого элемента (это если такой есть) или делает что-то похожее. Теперь прикинь количество вызовов функций при размере массива в несколько десятков миллионов элементов. Это вызывало тормоза. С memset'ом таких проблем не было. Вот и думай :) Все от ситуации зависит. Ага, щаз. То есть, memset - это дармовая функция, по вашему? А ну тогда протестируй: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.12.2007, 15:18:32 |
|
||
|
инициализация структуры
|
|||
|---|---|---|---|
|
#18+
Анатолий Широков wrote: > Ага, щаз. То есть, memset - это дармовая функция, по вашему? А ну > тогда протестируй: Можно устроить бенчмарк и сравнить, что будет быстрее - 1000000 раз войти/выйти в процедуру, или заполнить диапазон нулями одной процедурой. Но мне почему-то лень этим заниматсья. -- We are all going to hell and I'm driving the bus Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.12.2007, 15:31:57 |
|
||
|
инициализация структуры
|
|||
|---|---|---|---|
|
#18+
ErVМожно устроить бенчмарк и сравнить, что будет быстрее - 1000000 раз войти/выйти в процедуру, или заполнить диапазон нулями одной процедурой. Но мне почему-то лень этим заниматсья. Не одной быстротой сыт код. ЗЫ: по мотивам пословицы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.12.2007, 15:34:35 |
|
||
|
инициализация структуры
|
|||
|---|---|---|---|
|
#18+
ErV Анатолий Широков wrote: > Ага, щаз. То есть, memset - это дармовая функция, по вашему? А ну > тогда протестируй: Можно устроить бенчмарк и сравнить, что будет быстрее - 1000000 раз войти/выйти в процедуру, или заполнить диапазон нулями одной процедурой. Но мне почему-то лень этим заниматсья. -- We are all going to hell and I'm driving the bus Posted via ActualForum NNTP Server 1.4 Вот и славно, поэтому не надо голословными утверждениями (вы не привели точной ссылки) вводить в заблуждение о полезности memset - поскольку на самом деле, практика показывает, что применение memset весьма ограничено и это использование всегда на гране фола, в отличие от штатных средств языка C++. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.12.2007, 15:35:04 |
|
||
|
инициализация структуры
|
|||
|---|---|---|---|
|
#18+
Анатолий Широков Ага, щаз. То есть, memset - это дармовая функция, по вашему? не тестировал, но в случае с >при размере массива в несколько десятков миллионов элементов, думаю, все же будет выигрыш, т.к. в memset() для обнуления не нужно использовать косвенную адресацию для вызова эти конструкторов или нечто подобное, но тут мы остановились не на "каждоразовом" вызове пустого конструктора, а на побитовом копировании готового объекта, кажется есть разница? ErV Так что "замысел момента" ты придумываешь :). ты прав, я придумал, все дело в мыслях, но никто не может сказать, чья мысль правильнее ErV А правила будут слишком статичными, тем более не для всех задач они подходят. тоже верно, на любое правило есть исключение, если будет нужно очень, я нарушу их, поэтому предпочту называть их не правилами, а рекомендациями, применимыми в большем кол-ве случаев ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.12.2007, 15:37:46 |
|
||
|
инициализация структуры
|
|||
|---|---|---|---|
|
#18+
Tubrik Анатолий Широков Ага, щаз. То есть, memset - это дармовая функция, по вашему? не тестировал, но в случае с >при размере массива в несколько десятков миллионов элементов, думаю, все же будет выигрыш, т.к. в memset() для обнуления не нужно использовать косвенную адресацию для вызова эти конструкторов или нечто подобное, но тут мы остановились не на "каждоразовом" вызове пустого конструктора, а на побитовом копировании готового объекта, кажется есть разница? Как я понял автора, мы не сравниваем вызов memset для всех 100000 элементов, а сравнимаем что лучше: zero-инициализация средствами компилятора против memset для тойже структуры, то memset явно проигрывает. Если речь идет о занулении массива из 1000000 POD объектов средствами memset, то memset, конечно, "рулит". ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.12.2007, 15:43:43 |
|
||
|
|

start [/forum/topic.php?fid=57&msg=34994502&tid=2027678]: |
0ms |
get settings: |
8ms |
get forum list: |
21ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
216ms |
get topic data: |
10ms |
get forum data: |
3ms |
get page messages: |
50ms |
get tp. blocked users: |
1ms |
| others: | 206ms |
| total: | 523ms |

| 0 / 0 |
