标签: operator-overloading

运算符重载的基本规则和习惯用法是什么?

注意:答案是按照特定的顺序给出的,但由于许多用户根据投票而不是给出的时间对答案进行排序,因此这里是答案索引,它们是最有意义的顺序:

(注意:这是Stack Overflow的C++常见问题解答的一个条目.如果你想批评在这种形式下提供常见问题解答的想法,那么发布所有这些的元数据的发布将是这样做的地方.这个问题在C++聊天室中受到监控,其中FAQ的想法一开始就出现了,所以你的答案很可能被那些提出想法的人阅读.)

c++ operator-overloading operators c++-faq

2074
推荐指数
8
解决办法
88万
查看次数

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

从C++到Java,明显没有答案的问题是为什么Java不包含运算符重载?

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

是否存在已知的原因,有效的论据,使运算符重载?这个理由是武断的,还是输给了时间?

c++ java operator-overloading

394
推荐指数
10
解决办法
16万
查看次数

Pretty-print C++ STL containers

Please take note of the updates at the end of this post.

Update: I have created a public project on GitHub for this library!


I would like to have a single template that once and for all takes care of pretty-printing all STL containers via operator<<. In pseudo code, I'm looking for something like this:

template<container C, class T, String delim = ", ", String open = "[", String close = "]">
std::ostream & operator<<(std::ostream & o, const C<T> …
Run Code Online (Sandbox Code Playgroud)

c++ templates operator-overloading pretty-print c++11

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

如何基于参数类型重载__init__方法?

假设我有一个类,其成员名为data,这是一个列表.

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

你这样做的技巧是什么?

你只是看看类型__class__吗?

我可能会缺少一些技巧吗?

我已经习惯了C++,其中按参数类型重载很容易.

python constructor operator-overloading

297
推荐指数
5
解决办法
15万
查看次数

是==和!=相互依赖?

我学习C++操作符重载,我看到==!=仅仅是可定制的用户定义类型的一些特殊功能.但我担心的是,为什么需要两个单独的定义?我认为如果a == b是真的,则a != b自动为假,反之亦然,并且没有其他可能性,因为根据定义,a != b!(a == b).我无法想象任何情况都不是这样.但也许我的想象力是有限的,或者我对某些东西一无所知?

我知道我可以用另一个来定义一个,但这不是我要问的.我也没有询问按价值或身份比较对象之间的区别.或者两个对象是否可以同时相等且不相等(这绝对不是一个选项!这些东西是相互排斥的).我问的是这个:

是否有任何情况可以提出有关两个对象相等的问题是否有意义,但是询问它们相等是没有意义的?(无论是从用户的角度,还是从实施者的角度来看)

如果没有这种可能性,那么为什么地球上C++会将这两个运算符定义为两个不同的函数?

c++ equality operator-overloading equality-operator

292
推荐指数
11
解决办法
2万
查看次数

如何在C#中重载[]运算符

我想在一个类中添加一个运算符.我目前有一个GetValue()方法,我想用[]运算符替换.

class A
{
    private List<int> values = new List<int>();

    public int GetValue(int index) => values[index];
}
Run Code Online (Sandbox Code Playgroud)

c# indexer operator-overloading

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

一个积极的lambda:'+ [] {}' - 这是什么巫术?

在Stack Overflow问题中,在C++ 11中不允许重新定义lambda,为什么?,给出了一个不编译的小程序:

int main() {
    auto test = []{};
    test = []{};
}
Run Code Online (Sandbox Code Playgroud)

问题得到了回答,一切似乎都很好.然后是Johannes Schaub并做了一个有趣的观察:

如果你+在第一个lambda之前放置一个,它会神奇地开始工作.

所以我很好奇:为什么以下工作呢?

int main() {
    auto test = +[]{}; // Note the unary operator + before the lambda
    test = []{};
}
Run Code Online (Sandbox Code Playgroud)

它与GCC 4.7+和Clang 3.2+都很好.代码标准是否符合要求?

c++ lambda operator-overloading language-lawyer c++11

255
推荐指数
1
解决办法
3万
查看次数

如何在C#中重载方括号运算符?

例如,DataGridView允许您执行此操作:

DataGridView dgv = ...;
DataGridViewCell cell = dgv[1,5];
Run Code Online (Sandbox Code Playgroud)

但对于我的生活,我找不到索引/方括号运算符的文档.他们怎么称呼它?它在哪里实施?可以扔吗?我怎么能在自己的课上做同样的事情?

ETA:感谢所有快速解答.简而言之:相关文件属于"项目"属性; 重载的方法是声明一个属性,如public object this[int x, int y]{ get{...}; set{...} }; 至少根据文档,DataGridView的索引器不会抛出.它没有提到如果提供无效坐标会发生什么.

再次ETA:好的,即使文档没有提到它(顽皮的微软!),事实证明,如果你为它提供无效的坐标,DataGridView的索引器实际上会抛出一个ArgumentOutOfRangeException.公平的警告.

c# collections operator-overloading operators

242
推荐指数
5
解决办法
12万
查看次数

如何正确地重载<<操作符为ostream?

我正在用C++编写一个小矩阵库来进行矩阵运算.然而,我的编译器抱怨,在它之前没有.这个代码留在架子上6个月,在我之间我将我的计算机从debian etch升级到lenny(g ++(Debian 4.3.2-1.1)4.3.2)然而我在具有相同g ++的Ubuntu系统上遇到了同样的问题.

这是我的矩阵类的相关部分:

namespace Math
{
    class Matrix
    {
    public:

        [...]

        friend std::ostream& operator<< (std::ostream& stream, const Matrix& matrix);
    }
}
Run Code Online (Sandbox Code Playgroud)

而"实施":

using namespace Math;

std::ostream& Matrix::operator <<(std::ostream& stream, const Matrix& matrix) {

    [...]

}
Run Code Online (Sandbox Code Playgroud)

这是编译器给出的错误:

matrix.cpp:459:错误:'std :: ostream&Math :: Matrix :: operator <<(std :: ostream&,const Math :: Matrix&)'必须只取一个参数

我对这个错误感到有些困惑,但是在6个月里做了大量的Java后,我的C++又变得有点生疏了.:-)

c++ iostream namespaces operator-overloading ostream

223
推荐指数
5
解决办法
36万
查看次数

如何在Python中覆盖[]运算符?

[]在Python中覆盖类的运算符(下标表示法)的方法名称是什么?

python operator-overloading

194
推荐指数
3
解决办法
9万
查看次数