Если вам случится сравнивать адреса в стеке и куче, я бы сказал, что вполне возможно, что разница может быть больше, чем эта (поскольку обычно куча растет снизу, а стек уменьшается сверху).
Вместо возврата int
, верните ptrdiff_t
, что, как следует из его названия, является целочисленным типом, достаточно большим для хранения различий указателей.Вы все еще должны разыграть, хотя я выбрал char*
вместо int
, потому что он позволяет вам использовать static_cast
:
ptrdiff_t compare(void* A, void* B) { return static_cast<char*>(A) - static_cast<char*>(B); }
Наконец, если вы используете это с C qsort
, простоВозьмите простой способ: используйте std::sort
, который может использовать один <
и вообще не нужно ничего вычитать!