std::sort & comp - 调用约定?

std::sort & comp - calling convention?

Windows targeted project, Visual Studio 2012

我正在尝试使用 std::sort 对结构指针数组进行排序。排序是从结构中包含的 GUID 完成的,因此我想为我的排序调用定义一个自定义比较函数。

std::sort(
    std::begin(pUnits),
    std::end(pUnits),
    MyCustomSortFunctionHere
);

现在我的问题是,所提供的比较函数的预期调用约定是什么?问题可能是,调用约定在这里有什么不同吗?

我需要知道的原因是,我的项目设置使用默认调用约定,因此如果我在没有明确声明调用约定的情况下声明我的比较函数,我想知道它是否会中断。似乎无法在任何地方找到有关此的任何信息。

谢谢。

我的推理是 MyCustomSortFunctionHere 函数(或 class 方法?)是按照您要求的调用约定调用的:with

extern "C" bool MyCustomSortFunctionHere(Unit const*, Unit const*);

它将按照 "C" 调用约定进行调用。 由于 std::sort() 是一个模板函数,它实际上是和你的代码一起编译在它的同一个翻译单元中,包括调用你的比较函数的部分,对 MyCustomSortFunctionHere 的调用遵循你指定的规则在该翻译单元中。

如果您在同一个翻译单元中定义比较函数,您应该避免不指定任何约定。 如果该函数是在不同的翻译单元中定义的,则您需要向编译器表达这是正确的调用约定。

您的 MyCustomSortFunctionHere 是如何实现的?
一种。使用仿函数或,
b.使用方法签名 bool cmp(const Type1 &a, const Type2 &b)

如果是第一种方法,则使用 "thiscall" 调用约定,如果是第二种方法,则使用 __cdecl 调用约定。 我使用 Visual Studio 编译器针对上述每种方法生成的代码的反汇编验证了上述内容。

希望对您有所帮助!