C# pre- and post-increment operator overloading how-to?
c_中的h = ++i和h = i++之间存在差异。因此,我需要一种方法来声明不同的重载运算符,用于C_中的预增量(即+i)和后增量(i++)。我该怎么做?
我知道这两个操作符对它们所处理的值所做的操作是相同的——问题在于完成赋值的时间点。我知道如何在C++中做这件事,但这不是问题。我想知道是否有一种方法可以重载这个操作符在c中的两种行为,如果是这样的话,怎么做。
您不能http://msdn.microsoft.com/en-us/library/36x43w8w(v=vs.71).aspx。您只能重载++,唯一的区别是何时调用重载。
编辑:另外,对于用户定义的类型,您只能重载++,所以它基本上只是成为您选择的函数的别名。
- 这实际上意味着你不能超载一个后增量-它不会像它应该的那样工作,对吗?
- 嗯,我想这取决于你的班级和行为。
这些运算符的分离没有区别。实际上,它们的行为完全相同,唯一的区别是返回值。++运算符重载对两者都有效,不同的返回值由运行时提供,而不是用户代码。
编辑:找到了,我和我有什么区别?
- 运行时不返回返回值。"h=++i;"相当于"i=i+1,h=i";"h=i++;"相当于"h=i;i=i+1;"。这与解析器检测到的语义和随后生成的代码有关。
- 我找到了那个职位。我有一种感觉,操作人员的工作方式与你想象的不一样。
- 我会用不同的措辞来表达你的答案。Eric对另一个问题的简短回答是,运算符以完全相同的顺序执行完全相同的步骤,不同之处在于前缀形式返回新值(在本例中为i),而postfix返回旧值的临时副本。
- 请随意调整。