如果我们不从 std::qsort 中获取 return 0 会怎样?

What happens if we don't return 0 from std::qsort?

根据文档,qsort 应该像这样使用:

std::qsort(a, size, sizeof *a, [](const void* a, const void* b)
    {

        if(*a < *b) return -1;
        if(*a> *a) return 1;
        return 0;
    });

如果值相同并且我不介意哪个先出现,或者我希望根据其他变量先出现一个,我可以这样做吗?

if(*a < *b) return -1;
else return 1;

根据C11标准(7.22.5/4),

When the same objects (consisting of size bytes, irrespective of their current positions in the array) are passed more than once to the comparison function, the results shall be consistent with one another. That is, for qsort they shall define a total ordering on the array, and for bsearch the same object shall always compare the same way with the key.

您的比较函数违反了此要求,因为只要两个值相等,它就会 returns 1。当 qsort 使用你的比较函数比较两个相等的值 xy 时,它会 return 1,告诉 qsort x > y。如果稍后它比较 yx,那么比较函数将再次 return 1,即 y > x。这两个结果不一致。

此要求通过引用合并到 C++17 ([alg.c.library]/2)。因为违反了要求,所以行为未定义。