问题标签 [operator-overloading]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
13 回答
8340 浏览

c# - 如何在没有无限递归的情况下检查“==”运算符重载中的空值?

以下将导致 == 运算符重载方法的无限递归

如何检查空值?

0 投票
17 回答
181047 浏览

java - 为什么 Java 不提供运算符重载?

从 C++ 到 Java,显而易见的未解决问题是为什么 Java 不包含运算符重载?

不是Complex a, b, c; a = b + c;比 简单得多Complex a, b, c; a = b.add(c);吗?

是否有一个已知的原因,不允许运算符重载的有效参数?原因是随意的,还是被时间遗忘了?

0 投票
7 回答
10863 浏览

c# - 编写等于运算符时处理 null 的最佳方法

可能重复:
如何在没有无限递归的情况下检查“==”运算符重载中的空值?

当我为对象重载 == 运算符时,我通常会编写如下内容:

如果您不向下转换为对象,则该函数会递归到自身,但我想知道是否没有更好的方法?

0 投票
5 回答
4658 浏览

ruby - 为什么 Ruby 只允许某些运算符重载

在 Ruby 中,与许多其他 OO 编程语言一样,运算符是可重载的。但是,只能重载某些字符运算符。

此列表可能不完整,但以下是一些不能重载的运算符:

0 投票
9 回答
31038 浏览

c# - 比较引用类型的两个实例的“最佳实践”是什么?

我最近遇到了这个问题,到目前为止,我一直很高兴地覆盖相等运算符(==)和/或Equals方法,以查看两个引用类型是否实际上包含相同的数据(即看起来相同的两个不同实例)。

自从我更多地参与自动化测试(将参考/预期数据与返回的数据进行比较)以来,我一直在使用它。

在查看MSDN 中的一些编码标准指南时,我遇到了一篇反对它的文章。现在我明白这篇文章为什么这么说(因为它们不是同一个实例)但它没有回答这个问题:

  1. 比较两种引用类型的最佳方法是什么?
  2. 我们应该实现IComparable吗?(我还看到有人提到这应该只为值类型保留)。
  3. 有什么我不知道的接口吗?
  4. 我们应该自己动手吗?!

非常感谢^_^

更新

看起来我误读了一些文档(这是漫长的一天)并且覆盖Equals可能是要走的路..

如果您正在实现引用类型,如果您的类型看起来像 Point、String、BigNumber 等基本类型,则应考虑覆盖引用类型上的 Equals 方法。大多数引用类型不应重载相等运算符,即使它们覆盖 Equals也是如此。但是,如果您正在实现旨在具有值语义的引用类型,例如复数类型,则应覆盖相等运算符。

0 投票
4 回答
9840 浏览

c++ - 如何防止通过“新”运算符分配类?(我想确保我的 RAII 类始终分配在堆栈上。)

我想确保我的 RAII 类始终分配在堆栈上。

如何防止通过“新”运算符分配类?

0 投票
10 回答
214684 浏览

python - 如何根据参数类型重载 __init__ 方法?

假设我有一个类,它有一个名为 data 的成员,它是一个列表。

我希望能够使用例如文件名(其中包含用于初始化列表的数据)或实际列表来初始化类。

你这样做的技术是什么?

你只是通过查看来检查类型__class__吗?

我可能会错过一些技巧吗?

我习惯了 C++ 中的参数类型重载很容易。

0 投票
3 回答
18929 浏览

c# - .NET 泛型中重载运算符约束的解决方案

如果我想要一个只接受重载运算符的类型的泛型方法,例如减法运算符,我会怎么做。我尝试使用接口作为约束,但接口不能有运算符重载。

实现这一目标的最佳方法是什么?

0 投票
3 回答
20569 浏览

c++ - C++ 中的命名空间和运算符重载

在特定命名空间中编写库时,为该命名空间中的类提供重载运算符通常很方便。似乎(至少在 g++ 中)重载的运算符可以在库的命名空间中实现:

或全局命名空间

根据我的测试,它们似乎都运行良好。这两个选项之间有什么实际区别吗?哪种方法更好?

0 投票
6 回答
54100 浏览

c# - 使用 C# 扩展方法的运算符重载

我正在尝试使用扩展方法向 C#StringBuilder类添加运算符重载。具体来说,给定StringBuilder sb,我想sb += "text"等效于sb.Append("text")

下面是创建扩展方法的语法StringBuilder

它成功地将blah扩展方法添加到StringBuilder.

不幸的是,运算符重载似乎不起作用:

除其他问题外,this此上下文中不允许使用关键字。

是否可以通过扩展方法添加运算符重载?如果是这样,正确的方法是什么?