Модераторы: Daevaorn
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Сравнение структур через memcmp 
:(
    Опции темы
SaDFromSpb
Дата 5.2.2008, 11:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 263
Регистрация: 5.4.2006
Где: Санкт-Петербург

Репутация: 3
Всего: 3



Допустим, хочется один раз сравнить два экземпляра структуры. Писать оператор сравнения для нее не охота и не очень логично (вдруг потом поле добавится еще какое, или просто что-нить пропустишь по невнимательности).
Если использовать memcmp, то возникает вопрос, как быть с выравниванием? Гарантирует ли компилятор, что "дырки", которые получились в результате выравнивания будут заполняться одним и тем же символом? Оговорено ли это в стандарте?



--------------------
"За исключением части, касающейся потоков, библиотека Loki написана на стандартном языке С++. Увы, это означает, что многие современные компиляторы не смогут работать с ней в полном объеме." (А. Александреску. Modern C++ design. 2001)
PM   Вверх
NiJazz
Дата 5.2.2008, 12:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Jazz coder
****


Профиль
Группа: Экс. модератор
Сообщений: 2286
Регистрация: 10.8.2003
Где: Москва

Репутация: 1
Всего: 23



SaDFromSpb, как бы там ни было, что бы ни гарантировалось, а лучше всё-таки написать оператор сравнения.
PM MAIL   Вверх
Alek86
Дата 5.2.2008, 12:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1299
Регистрация: 30.1.2007
Где: Киев

Репутация: 21
Всего: 25



кстати, в тему вопрос

есть какой-то метапрограммный механизм, позволяющий компилеру ругаться ошибкой, если пропустил хоть одно поле в операторе стравнения?


--------------------
user posted image    user posted image
PM MAIL   Вверх
NiJazz
Дата 5.2.2008, 13:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Jazz coder
****


Профиль
Группа: Экс. модератор
Сообщений: 2286
Регистрация: 10.8.2003
Где: Москва

Репутация: 1
Всего: 23



Зачем так всё усложнять? smile Просто возьмите за правило: добавляя новый член не забывайте про оператор сравнения. 
Комментарии на что? smile
PM MAIL   Вверх
Alek86
Дата 5.2.2008, 17:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1299
Регистрация: 30.1.2007
Где: Киев

Репутация: 21
Всего: 25



Цитата(NiJazz @  5.2.2008,  13:14 Найти цитируемый пост)
Зачем так всё усложнять?  Просто возьмите за правило: добавляя новый член не забывайте про оператор сравнения. 

и зачем эти smart pointers?
просто возьми за правило - если делаешь new, то делай и delete ;)

Это сообщение отредактировал(а) Alek86 - 5.2.2008, 17:08


--------------------
user posted image    user posted image
PM MAIL   Вверх
Lazin
Дата 5.2.2008, 17:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3820
Регистрация: 11.12.2006
Где: paranoid oil empi re

Репутация: 41
Всего: 154



Alek86, используй boost::tuple, для них есть операторы сравнения, для произвольной структуры обобщенный оператор сравнения нельзя запрограммировать.

Добавлено @ 17:32
по крайней мере на плюсах нельзя, можно когда есть рефлекшн

Это сообщение отредактировал(а) Lazin - 5.2.2008, 17:33
PM MAIL Skype GTalk   Вверх
Alexeis
Дата 5.2.2008, 17:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 12
Всего: 459



  У объектов могут быть динамические массивы или указатели на одинаковые данные, по сути объекты могут быть одинаковыми по содержанию, но неодинаковыми бинарно, так как адреса блоков будут разные.


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
SaDFromSpb
Дата 7.2.2008, 13:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 263
Регистрация: 5.4.2006
Где: Санкт-Петербург

Репутация: 3
Всего: 3



А все-таки, в стандарте говорится что-нибудь по поводу заполнения дырок в структурах или нет?



--------------------
"За исключением части, касающейся потоков, библиотека Loki написана на стандартном языке С++. Увы, это означает, что многие современные компиляторы не смогут работать с ней в полном объеме." (А. Александреску. Modern C++ design. 2001)
PM   Вверх
test0
Дата 13.2.2008, 13:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 11
Регистрация: 13.2.2008

Репутация: нет
Всего: нет



Нет, не говориться. Это из той же серии, что и автоматические переменные.
PM MAIL   Вверх
Lazin
Дата 13.2.2008, 14:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3820
Регистрация: 11.12.2006
Где: paranoid oil empi re

Репутация: 41
Всего: 154



честно говоря это больше относится к программированию на С:
сначала память отведенная под структуру обнуляется ZeroMemory(&struct, sizeof(struct) );
потом можно уже сравнивать memcmp  smile 
PM MAIL Skype GTalk   Вверх
JackYF
Дата 13.2.2008, 16:21 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


полуавантюрист
****


Профиль
Группа: Участник
Сообщений: 5814
Регистрация: 28.8.2004
Где: страна тысячи озё р

Репутация: 18
Всего: 162



Цитата(Lazin @  13.2.2008,  13:08 Найти цитируемый пост)
ZeroMemory

memset. Тут общие вопросы smile


--------------------
Пожаловаться на меня как модератора можно здесь.
PM MAIL Jabber   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0532 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.