Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[3.137.161.222] |
|
Сообщ.
#1
,
|
|
|
struct SCompare{
int i; char c; void* v; long l; float f; double d; }; Есть простая структура наподобии SCompare. Я для сравнения 2х экземпляров структуры использую оператор ==, а вот в чужих искодниках часто встречаю сравнение с помощью memcmp. Разница то в чём? |
Сообщ.
#2
,
|
|
|
Вроде бы, чтобы точно сравнивать структуры оператором == , чтобы не было никаких ошибок, нужно явно перегрузить этот оператор, иначе могут быть иногда неточности. Наверное. А функция memcmp сравнивает 2 блока памяти друг с другом, побитно. Это надежнее, особенно когда operator == не перегружен.
Или нет? |
Сообщ.
#3
,
|
|
|
Для POD-типов - ни в чем. Но твой вариант в любом случае лучше, т. к. предустматривает возможность переопределения оператора сравнения для структуры.
|
Сообщ.
#4
,
|
|||
|
несогласен. Какие могут быть ошибки при использовании непергруженного оператора ==? |
Сообщ.
#5
,
|
|||
|
Строки одинаковые, т.е. по идее структуры равны, у сравнение == вернет false |
Сообщ.
#6
,
|
|
|
хм..
но для таких случаев и перегружают оператор ==. Т.е. логическое постоянство обьекта и физическое уже разные вещи... Короче, прихожу к выводу, что между неперегруженным оператором == и ф-цией memcmp разницы нет. |
Сообщ.
#7
,
|
|
|
когда объект "сложный", иногда некоторые его данные не имеют значения, скажем его координаты, посему для таких объектов memcmp необъективен.
|
Сообщ.
#8
,
|
|||||
|
Так тут и memcmp скажет, что не равны структуры Дефолтовый оператор == по сути не отличается от memcmp |
Сообщ.
#9
,
|
|
|
ИМХО, использование оператора == предпочтительнее, нежели memcpy()... Так как если ты немного изменишь свою структуру и добавишь например указатель, то уже memcpy будет некорректна.. а оператор == всегда мона перегрузить так, чтобы он работал правильно..
Тем более может надо делать отборку по каким-либо отдельным данным... в общем, оператор == луче.. хотя в дефолтовом представлении, как уже сказали, он то же самое, что и memcpy()... |
Сообщ.
#10
,
|
|
|
Согласен. Лучше == чем memcpy - просто меньше таблов можно поиметь
|
Сообщ.
#11
,
|
|
|
Что-то вы заговариваться начали. Копирование буфера (memcpy) никак не способствуют их сравнению.
А оператор== лучше memcmp просто потому, что читается лучше. Гораздо лучше выражает намерение программиста, да и использовать его удобнее. Ну и опять же, как верно заметили, в случае нужды его можно перегрузить. |