与运算符<=>相比,使用运算符< etc

问题描述 投票:0回答:1

这些示例和使用之间的性能会有差异吗< or == operators?

struct Data {
    int x;
    int y;

    bool operator<(const Data& other) const {
        if (x != other.x) return x < other.x;
        return y < other.y;
    }

    bool operator==(const Data& other) const {
        return x == other.x && y == other.y;
    }

    bool operator>(const Data& other) const {
        return !(*this < other) && !(*this == other);
    }
};
struct Data {
    int x;
    int y;

    auto operator<=>(const Data& other) const = default;
};

我在反汇编中看到我们有开销函数调用 https://godbolt.org/z/17EbTabG5

c++ optimization stl c++20
1个回答
0
投票

https://godbolt.org/z/5bjcMqc4b - 此示例显示了具有不同实现的 2 个类的 GCC 汇编器之间的细微差别。而且差异很小。

这里的第一个数据具有更快的排序比较,但是 第二个数据具有更快的平等性

gcc 14.2

https://godbolt.org/z/ozTcvb848 - 在同一个示例中,如果我们选择Clang,我们将看到汇编器完全没有区别。 clang 19

感谢fow评论和示例Drew Dormann

© www.soinside.com 2019 - 2024. All rights reserved.