为什么我不能将 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)
变量 c
是 const
。但是,您的 operator==
不是 const-qualified,因此 ==
的左侧必须是 non-const.
正确的解决方法是将 operator==
标记为 const
(如果它是成员函数):
bool operator == (const Coord<T> &p) const {
// ^^^^^
我有以下功能:
#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)
变量 c
是 const
。但是,您的 operator==
不是 const-qualified,因此 ==
的左侧必须是 non-const.
正确的解决方法是将 operator==
标记为 const
(如果它是成员函数):
bool operator == (const Coord<T> &p) const {
// ^^^^^