![]() |
|
Модераторы: Daevaorn |
![]()
|
|
| SaDFromSpb |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 263 Регистрация: 5.4.2006 Где: Санкт-Петербург Репутация: 3 Всего: 3 |
Допустим, хочется один раз сравнить два экземпляра структуры. Писать оператор сравнения для нее не охота и не очень логично (вдруг потом поле добавится еще какое, или просто что-нить пропустишь по невнимательности).
Если использовать memcmp, то возникает вопрос, как быть с выравниванием? Гарантирует ли компилятор, что "дырки", которые получились в результате выравнивания будут заполняться одним и тем же символом? Оговорено ли это в стандарте? -------------------- "За исключением части, касающейся потоков, библиотека Loki написана на стандартном языке С++. Увы, это означает, что многие современные компиляторы не смогут работать с ней в полном объеме." (А. Александреску. Modern C++ design. 2001) |
|||
|
||||
| NiJazz |
|
|||
![]() Jazz coder ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 2286 Регистрация: 10.8.2003 Где: Москва Репутация: 1 Всего: 23 |
SaDFromSpb, как бы там ни было, что бы ни гарантировалось, а лучше всё-таки написать оператор сравнения.
|
|||
|
||||
| Alek86 |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1299 Регистрация: 30.1.2007 Где: Киев Репутация: 21 Всего: 25 |
кстати, в тему вопрос
есть какой-то метапрограммный механизм, позволяющий компилеру ругаться ошибкой, если пропустил хоть одно поле в операторе стравнения? |
|||
|
||||
| NiJazz |
|
|||
![]() Jazz coder ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 2286 Регистрация: 10.8.2003 Где: Москва Репутация: 1 Всего: 23 |
Зачем так всё усложнять?
Комментарии на что? |
|||
|
||||
| Alek86 |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1299 Регистрация: 30.1.2007 Где: Киев Репутация: 21 Всего: 25 |
||||
|
||||
| Lazin |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3820 Регистрация: 11.12.2006 Где: paranoid oil empi re Репутация: 41 Всего: 154 |
Alek86, используй boost::tuple, для них есть операторы сравнения, для произвольной структуры обобщенный оператор сравнения нельзя запрограммировать.
Добавлено @ 17:32 по крайней мере на плюсах нельзя, можно когда есть рефлекшн Это сообщение отредактировал(а) Lazin - 5.2.2008, 17:33 |
|||
|
||||
| Alexeis |
|
|||
![]() Амеба Профиль Группа: Админ Сообщений: 11743 Регистрация: 12.10.2005 Где: Зеленоград Репутация: 12 Всего: 459 |
У объектов могут быть динамические массивы или указатели на одинаковые данные, по сути объекты могут быть одинаковыми по содержанию, но неодинаковыми бинарно, так как адреса блоков будут разные.
-------------------- Vit вечная память. Обсуждение действий администрации форума производятся только в этом форуме гениальность идеи состоит в том, что ее невозможно придумать |
|||
|
||||
| SaDFromSpb |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 263 Регистрация: 5.4.2006 Где: Санкт-Петербург Репутация: 3 Всего: 3 |
А все-таки, в стандарте говорится что-нибудь по поводу заполнения дырок в структурах или нет?
-------------------- "За исключением части, касающейся потоков, библиотека Loki написана на стандартном языке С++. Увы, это означает, что многие современные компиляторы не смогут работать с ней в полном объеме." (А. Александреску. Modern C++ design. 2001) |
|||
|
||||
| test0 |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 11 Регистрация: 13.2.2008 Репутация: нет Всего: нет |
Нет, не говориться. Это из той же серии, что и автоматические переменные.
|
|||
|
||||
| Lazin |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3820 Регистрация: 11.12.2006 Где: paranoid oil empi re Репутация: 41 Всего: 154 |
честно говоря это больше относится к программированию на С:
сначала память отведенная под структуру обнуляется ZeroMemory(&struct, sizeof(struct) ); потом можно уже сравнивать memcmp |
|||
|
||||
| JackYF |
|
|||
![]() полуавантюрист ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 5814 Регистрация: 28.8.2004 Где: страна тысячи озё р Репутация: 18 Всего: 162 |
||||
|
||||
![]()
|
| Правила форума "С++:Общие вопросы" | |
|
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |