当前位置: 首页 > 知识库问答 >
问题:

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

太叔富
2023-03-14

我有以下功能:

#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;
}

<代码>坐标

这是它的重载==运算符:

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

如果(c==i),它会在以下位置给我一个错误:

错误:传递“常量坐标”

共有1个答案

高才
2023-03-14

相比之下:

if (c == i)

变量c是常数。但是,您的操作符==不符合常量,因此要求==的左侧为非常量。

正确的解决方法是,如果操作符是成员函数,则将其标记为const:

bool operator == (const Coord<T> &p) const {
                                 //  ^^^^^
 类似资料:
  • 问题内容: 当我尝试更改实例的属性时,我收到一条错误消息,告诉我即使该属性是变量,也无法将其分配给常量的属性。但是,我可以在类实例上执行此操作。我有点知道它可能与按值和按引用机制有关。但是我对此没有非常清楚和正确的理解。有人可以帮我解释一下吗?谢谢。 问题答案: Swift中的结构是值类型 –从语义上讲,值(即值类型的“实例”)是不可变的。 值类型的突变,无论是通过直接更改属性的值,还是通过使用方

  • 问题内容: 我明白: 由于抽象类本身并不是什么,例如车辆,我们想要创建一个具体实现的对象,例如Car,Bike等。 对象链期间将调用抽象类的构造函数。 我们永远不能直接创建抽象类的对象,即使它包含构造函数并且所有方法都已实现。 但是从编译器的角度来看,Java为什么要强制执行这些规则? 问题答案: 这不是技术限制,而是(如您所指出的)逻辑上的限制。Java(和许多其他语言)执行各种规则不是因为它们

  • 问题内容: 我知道这个问题听起来很模糊,因此我将通过一个示例来使其更加清楚: 这就是我要做的。你会怎么做?我当然可以这样使用eval(): 但是我宁愿远离eval()。没有eval(),有没有办法做到这一点? 问题答案: 首先将类名放入变量中: 这通常是您将以Factory模式包装的东西。

  • 我已经完成了一些Java教程,它们都说在调用类时创建一个新变量。这是为什么?我已经测试了一些代码,但它没有这样做。我已经使用python很长一段时间了,所以我习惯于使用动态语言。 请看下面我一直在玩的一些代码: 谢谢你的时间。

  • 考虑类<代码> OuterClass < />代码> <代码> InnerClass < /代码> 第二个类,它试图扩展

  • 假设我有一个名为的JPA实体类用于存储照片。我还有另一个名为的非实体类来保存这些计数信息,如、和。现在,如果在实体类中添加一个实例变量()来保存这些状态信息,则会显示以下错误消息: 基本属性只能是以下类型:Java基本类型、基本类型包装器、字符串、Java。数学BigInteger,java。数学BigDecimal,java。util。日期,爪哇。util。日历,java。sql。日期,爪哇。s