为什么我不能将 class 的常量实例与相同 class 的非常量实例进行比较?

Why can't I compare a constant instance of a class with a non-constant instance of the same class?

我有以下功能:

#include <cstdint>
using int_32 = int32_t;

bool func(const Coord<int_32> c)
{
    for (Coord<int_32> i : boxes)
        if (c == i)
            return 0;
    return 1;
}

Coord<int_32> 是一个结构,有两个 int 类型的成员 (int32_t).

这是重载的 == 运算符:

bool operator == (const Coord<T> &p)
{
    if (this -> x == p.x &&
        this -> y == p.y)
        return 1;
    return 0;
}

它在 if (c == i) 处给我一个错误:

error: passing 'const Coord<int>' as 'this' argument discards qualifiers [-fpermissive]

在你的比较中:

if (c == i)

变量 cconst。但是,您的 operator== 不是 const-qualified,因此 == 的左侧必须是 non-const.

正确的解决方法是将 operator== 标记为 const(如果它是成员函数):

bool operator == (const Coord<T> &p) const {
                                 //  ^^^^^