标签: equals-operator

派生类中的运算符==永远不会被调用

可有人把我从我的苦难与此吗?我试图弄清楚为什么派生运算符==永远不会在循环中被调用.为了简化示例,这是我的Base和Derived类:

class Base { // ... snipped
  bool operator==( const Base& other ) const { return name_ == other.name_; }
};

class Derived : public Base { // ... snipped
  bool operator==( const Derived& other ) const { 
    return ( static_cast<const Base&>( *this ) ==
             static_cast<const Base&>( other ) ? age_ == other.age_ :
                                                 false );
};
Run Code Online (Sandbox Code Playgroud)

现在当我像这样实例化和比较时......

Derived p1("Sarah", 42);
Derived p2("Sarah", 42);
bool z = ( p1 == p2 );
Run Code Online (Sandbox Code Playgroud)

... 一切都很好.这里调用了来自Derived的operator ==,但是当我循环遍历列表时,将指针列表中的项目与Base对象进行比较......

list<Base*> coll;

coll.push_back( …
Run Code Online (Sandbox Code Playgroud)

c++ polymorphism virtual operators equals-operator

4
推荐指数
1
解决办法
2438
查看次数

你应该使用'isEqual'还是'=='?

我在SO上看到了几个问题,包括函数isEqual:而不是标准的ansers ==.

到目前为止,我只学会使用它==,所以我想知道什么是更好的使用,每个的优点和缺点是什么?你应该什么时候使用它们?

谢谢.

iphone comparison equality objective-c equals-operator

4
推荐指数
1
解决办法
854
查看次数

对于CLR类型,Object.Equals(objA,objB),objA.Equals(objB)和objA == objB之间的区别?

我想知道CLR类型是否会返回以下不同的结果:

Object.Equals(objA, objB)

objA.Equals(objB)

(objA == objB)
Run Code Online (Sandbox Code Playgroud)

我确实意识到在CLR之外有人可以轻松地实现IEqualtableEquals并且不正确地重载==运算符.我不关心那些不正当地实施这些的人.我所关注的是类(包括String,Int32等)以不同的方式实现这3个.

此外,如果可能的话,哪一个应该是用于整体比较的(全面).我想知道这是因为我遇到了一个文件,它使用Object.Equals(objA, objB)了整个视图模型而不是其他两个.

private string _name;
public string Name
{
    get { return _name; }
    set
    {
        if (Equals(_name, value)) return;
        ...
    }
}

private int _id;
public int Id
{
    get { return _id; }
    set
    {
        if (Equals(_id, value)) return;
        ...
    }
}

private Object _obj;
public Object TheObject
{
    get { return _obj; }
    set
    {
        if (Equals(_obj, value)) return;
        ...
    }
}
Run Code Online (Sandbox Code Playgroud)

.net c# iequatable equals-operator object-equality

4
推荐指数
1
解决办法
717
查看次数

JavaScript中==和===有什么区别?

可能重复:
Javascript === vs ==:我使用哪个"相等"运算符是否重要?
什么时候JavaScript ==比===更有意义?

将字符串与未定义值进行比较时,以下方法之间的区别是什么.

 var x; 
 if(x==undefined) 
 { 
  alert(x); 
 }
Run Code Online (Sandbox Code Playgroud)

if(x===undefined)
{ 
  alert(x); 
}
Run Code Online (Sandbox Code Playgroud)

在这种情况下,为什么我更喜欢第二种方法..请让我知道优点..

javascript equals-operator identity-operator

4
推荐指数
4
解决办法
4万
查看次数

重复拳击使不同的参考?

我试着理解这段代码:

double b = 3;
object o = b;
Console.WriteLine(o.Equals(3));//false
Console.WriteLine(o.Equals(b));//true
Console.WriteLine( o == (object)b );//false
Run Code Online (Sandbox Code Playgroud)
  1. 每个新拳击对象b的不同引用?
  2. 1.如果是真的,为什么o.Equals(b)true
  3. 如果Equals不检查的引用,为什么o.Equals(3)false

谢谢.

c# boxing equals equals-operator

4
推荐指数
1
解决办法
159
查看次数

如果最后一列等于"R"那么......有可能吗?在unix中

我需要从包含一些字段的变量中找到最后一列.我需要写一些类似的东西:

    if [ #the last column = "R" ];
    then
    value=`echo "'$value'"`
    fi
Run Code Online (Sandbox Code Playgroud)

可能吗?

unix awk ksh if-statement equals-operator

4
推荐指数
1
解决办法
141
查看次数

相当混淆这个带有&without =的代码片段返回类型

object A extends App {

def closure1(x:Int) = {
  object O {
   def getX = x
   def add(y:Int) = x+y
  }
  val foo = O
  foo
}

def closure2(x:Int) {
  object O {
   def getX = x
   def add(y:Int) = x+y
  }
  val foo = O
  foo
}

println(closure1(4).getClass)
println(closure2(4).getClass)
}

result:
 $scala A
 class A$O$3$
 void
Run Code Online (Sandbox Code Playgroud)
  1. 为什么返回类型不同?
  2. 我真的不关心退货类型.我想调用getX并添加 - 我想做一些像closes1(4).getX这样的事情 - 这是非法的.我怎么做 ?

closures scala equals-operator

4
推荐指数
1
解决办法
8494
查看次数

斯卡拉:有没有办法覆盖"不等于"(!=)?

我正在编写一个生成SQL的DSL.加载表的语法是:

    session.activateWhere( _.User.ID == 490 )
Run Code Online (Sandbox Code Playgroud)

这将从用户表中选择ID列为490.我可以使用"=="因为我可以覆盖"equals()"来生成正确的SQL.我的问题是"!="不起作用,因为它调用equals()然后否定结果.可悲的是,"!="是最终的,所以我无法覆盖它.在我的equals()方法中有什么方法可以告诉它是作为!=的一部分调用的吗?

我已经实现了一个"<>"操作,在逻辑上做与"!="相同的操作,它工作正常:

    session.activateWhere( _.User.ID <> 490 )
Run Code Online (Sandbox Code Playgroud)

我的问题是,不仅"!="有效语法(对编译器而言),它将运行并生成与用户意图完全相反的语法.

overriding scala equals equals-operator

4
推荐指数
1
解决办法
4928
查看次数

在Perl中重载'='

因为'='在Perl中简单地重载并不像人们期望的那样,所以这样做的正确方法是什么?

从报价超载的perldoc:

简单赋值不可重载(该'='键用于复制构造函数).Perl确实有办法让对象做任何你想做的事情,但这涉及到使用tie(),而不是overload- 请参阅下面的领带COOKBOOK示例.

我已经阅读了COOKBOOK和文件的领带,我很难弄清楚如何以这种方式使用它.


我希望能够像这样创建一个对象:my $object = Object->new()然后当我将它分配给某些东西时,我希望它能做一些特殊的处理.

例如:$object = 3内部会做类似的事情$object->set_value(3);

我知道这不一定是好习惯.这更像是一个教育问题.我只是想知道如何做到这一点.不是否应该这样做.

oop perl operator-overloading equals-operator

4
推荐指数
1
解决办法
200
查看次数

“乌龙==乌龙?” 评估为“ ulong == ulong”可以正常工作

如果我们==在的表达式ulong和的表达式之间使用运算符ulong?,则bool ulong(ulong left, ulong right)似乎会使用运算符重载。

显示使用==运算符

换句话说,运算符认为两个表达式都不为空。

在此示例程序中,equal无例外,正确地变为false。

void Main()
{
    var temp = new Temp(0);
    object temp2 = null;

    var equal = temp.Id == (temp2 as Temp)?.Id; // False :) but how?
}

public class Temp
{
    public ulong Id {get;}

    public Temp(ulong id)
    {
        this.Id = id;
    }
}
Run Code Online (Sandbox Code Playgroud)
  1. 这怎么不丢?没有将ulong?值从null 转换为的转换ulong(ulong)(ulong?)null抛出:“可为空的对象必须具有一个值。”
  2. 这是否会为的每个可能值ulong?包括null)返回正确的值?如果是这样,怎么办?该类型ulong?具有比更大的可能值ulong,因此应该有一组两个值映射到相同的 ulong值,这将引入一个错误的肯定“ …

c# nullable operator-overloading equals-operator

4
推荐指数
2
解决办法
78
查看次数