代码之家  ›  专栏  ›  技术社区  ›  David

重载C中的+和-运算符#

  •  4
  • David  · 技术社区  · 15 年前

    它出现在C您不能覆盖后递减运算符?

    我在“反射”中遇到了一些反射转换为 decimal.op_Decrement(x) 我想知道这是否意味着 --x x-- .

    public struct IntWrapper
    {
        public static IntWrapper operator --(IntWrapper value)
        {
            return new IntWrapper(value.value - 1);
        }
    
        public static IntWrapper operator (IntWrapper value)--
        {
            ???
        }
    
        private int value;
    
        public IntWrapper(int value)
        {
            this.value = value;
        }
    }
    

    框架是否只对“后递减”操作使用“预递减”版本?

    3 回复  |  直到 15 年前
        1
  •  12
  •   LiraNuna    15 年前

    后缀 ++ / -- 运算符与前缀对应项相同,但第一个运算符在赋值之前创建变量的副本(如果需要)。

    所以,这个代码:

    int x = Function(y--);
    

    等于此代码:

    int x = Function(y);
    --y;
    

    这就是为什么不需要重载后缀操作符的原因。

        2
  •  1
  •   cdmckay    15 年前

    基本上,无需区分,因为:

    decimal x = y--;
    

    等于

    decimal x = y;
    decimal.op_Decrement(y);
    

    decimal x = --y;
    

    等于

    decimal x;
    decimal.op_Decrement(y);
    x = y;
    
        3
  •  0
  •   Michael Petrotta user3140870    15 年前

    没关系。在操作变量的上下文中,前缀和后缀操作符之间没有区别。只有在调用代码的上下文中,差异才重要。