问题标签 [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 投票
12 回答
30164 浏览

c# - 为什么'='不能在C#中重载?

我想知道,为什么我不能在 C# 中重载“=”?我能得到更好的解释吗?

0 投票
7 回答
9620 浏览

c++ - 重载运算符 << - C++

背景

我有一个在内部使用 vector<std::string> 的容器类。我为这个包装类提供了一个方法AddChar(std::string) ,它对内部向量执行push_back() 。在我的代码中,有时我必须向容器中添加多个项目。为此我必须使用

这使得代码更大。所以为了让它更容易,我打算重载操作符<<。这样我就可以写了

两个项目将被添加到基础向量中。

这是我用来做的代码

它按预期工作。

问题

  1. 运算符重载是否正确编写?
  2. 在这种情况下重载运算符是一种好习惯吗?
  3. 这段代码会有任何性能问题或任何其他问题吗?

有什么想法吗?

编辑

在听到优秀的评论后,我决定不超载 << 因为它在这里没有意义。我删除了运算符重载代码,这是最终代码。

这允许我添加

在 C# 中,我可以通过使用 params 关键字更轻松地做到这一点。代码会像

我知道在 C++ 中,我们可以使用...来指定参数的可变长度。但是 AFAIK,它不是类型安全的。那么这样做是推荐的做法吗?这样我就可以写了

感谢您的回复。

0 投票
6 回答
17205 浏览

c++ - C++:从类内访问 operator[] 的便捷方式?

operator[]我有一个重载数组下标/括号运算符的 C++ 类。这在我的课外非常方便,我可以在那里写foo[bar]。但是,当我在我的类中实现方法时,我不知道如何使用这种表示法。

我知道我可以写operator[](bar)this->operator[](bar)但是这些都相当笨拙,并且首先剥夺了操作员的很多便利。(我也知道我可以添加一个调用运算符的新方法。)有没有一种我可以编写this[bar]this->[bar]类似的好方法?

0 投票
2 回答
302 浏览

c++ - 使用运算符重载 C++ 进行监控

我想编写一个所有运算符重载的包装类,以便我可以检测我们何时写入/读取或修改其内容。例如:

有人已经这样做了吗?如果不是,我必须重载哪些运算符以确保我不会错过任何内容?

0 投票
4 回答
491 浏览

c# - 重载operator==后,如何比较两个变量是否指向同一个对象?

重载比较运算符,如果两个变量指向同一个对象(即不是值)如何比较

0 投票
5 回答
5109 浏览

c++ - 重载 << 运算符 C++ - 指向类的指针

工作正常,但我想使用指向类实例的指针。IE

这可能吗?如果是这样,语法是什么?谢谢

编辑:编译器错误是

0 投票
10 回答
18287 浏览

c++ - std::copy 到 std::cout 用于 std::pair

我有下一个代码:

在这段代码中,我只想将映射复制到输出流。为此,我需要定义运算符 <<(..) - 好的。但是根据名称查找规则编译器找不到我的操作符<<()。
因为 std::cout、std::pair 和 std::copy 调用了我的 operator<< - 都来自命名空间 std。

快速解决方案 - 将我的 oerator<< 添加到 std 命名空间 - 但它很难看,恕我直言。

您知道此问题的哪些解决方案或解决方法?

0 投票
2 回答
12761 浏览

c++ - 在 C++ 中重载全局运算符 new/delete

我正在尝试为性能敏感的应用程序重载全局运算符 new 和 delete。我已阅读http://www.informit.com/articles/article.aspx?p=30642&seqNum=3中描述的问题以及使用英特尔 TBB 分配器的建议http://www.intel.com/technology/itj/ 2007/v11i4/5-foundations/5-memory.htm

由于我是第一次重载 new 和 delete,所以我有几个问题。

我是否应该在所有包含“新”调用的文件中包含包含重载新函数的新标头 Allocator.h(或 Pre.h)?这很乏味。

或者我应该在每个翻译单元中使用包含 Allocator.h(之前)的“gcc -include Allocator.h ...”吗?我想尽可能地保持代码平台独立。所有编译器都支持类似于“gcc -include”的东西吗?

0 投票
4 回答
4384 浏览

c++ - 重载算术运算符

赋值运算符可以声明为

T& 运算符= (const t&);

在一个类中,但不能以这种方式定义算术运算符。它必须是朋友功能。我不明白为什么?你能解释一下吗?

0 投票
8 回答
10953 浏览

c# - C# 模拟覆盖赋值运算符 (=)

我有一个有点简单的包装类有一点问题。

它看起来像这样:

我已经覆盖了从和到 T 的隐式转换器,所以它的行为几乎就像 T 本身的一个实例。

例如

但是,在将 Wrapper 的一个实例分配给另一个时,我遇到了一个小问题,因为我只想分配第二个 Wrapper 类的值。

所以现在,我必须这样做:

或者通过属性公开 _value。

但是,由于这是在库中,并且我不希望用户依赖于记住这一点,你们知道我如何模仿覆盖赋值运算符吗?

仅更改指针的问题(就像将类实例分配给另一个时所做的那样)是我有一个指向这些 Wrapper 对象的指针字典,因此我不能一直更改它们,因为字典会停止然后匹配。

我可以看看这是否有点令人困惑,所以如果我遗漏了任何重要的内容,请随时询问:-)