代码之家  ›  专栏  ›  技术社区  ›  Jonathan C Dickinson

C中运算符方法的方法名#

  •  2
  • Jonathan C Dickinson  · 技术社区  · 15 年前

    是否有人有C/clr提供给运算符的完整名称列表?(可能是我睡眠不足,但我在谷歌上找不到),例如,op_加法,op_减法。此外,在其他文化中,这些有可能是不同的吗?

    我正在尝试创建一个类,它可以对两个对象进行加/减等操作,并且我已经完成了所有的原语-我只需要完成“其余”操作。

    多谢。

    4 回复  |  直到 5 年前
        1
  •  4
  •   Theraot    5 年前

    这是完整的清单 C# overloadable operators

    可以在下面找到运算符元数据/生成的msil名称的列表 Framework Design Guidelines -> Operator Overloads .

    有不同的 F# operator overload list .

    最后,请参阅 ECMA-335 Common Language Infrastructure (CLI) I.103运算符重载,其中列出了C++/CLI的运算符。

        2
  •  4
  •   IS4    8 年前

    基于 表情 班级:

    == op_Equality
    != op_Inequality
    >  op_GreaterThan
    <  op_LessThan
    >= op_GreaterThanOrEqual
    <= op_LessThanOrEqual
    &  op_BitwiseAnd
    |  op_BitwiseOr
    +  op_Addition
    -  op_Subtraction
    /  op_Division
    %  op_Modulus
    *  op_Multiply
    << op_LeftShift
    >> op_RightShift
    ^  op_ExclusiveOr
    -  op_UnaryNegation
    +  op_UnaryPlus
    !  op_LogicalNot
    ~  op_OnesComplement
       op_False
       op_True
    ++ op_Increment
    -- op_Decrement
    
        3
  •  3
  •   Community Neeleshkumar S    7 年前

    接受的答案很好,因为它链接到可重载运算符的列表,但它没有严格回答问题,因为它在编译时不提供运算符的名称。

    第二名的答案包括这一点,但这是一个不完整的列表,而且没有很好的组织。为了完整性起见,我创建了自己的列表,包括一些您可能期望可以重载但不能重载的运算符。该列表按照运算符优先级的顺序排列,从最高(最紧)优先级到最低优先级。

    Outside of Order of Operations (used when necessary to coerce types)
       op_Implicit
       op_True
       op_False
    
    Unary (only one operator)
    ++ op_Increment (Includes preincrement and postincrement)
    -- op_Decrement (Includes predecrement and postdecrement)
    -  op_UnaryNegation
    +  op_UnaryPlus
    !  op_LogicalNot
    ~  op_OnesComplement
       op_Explicit
    await (Not overloadable)
    
    Multiplicative
    /  op_Division
    %  op_Modulus
    *  op_Multiply
    
    Additive
    +  op_Addition
    -  op_Subtraction
    
    Shift
    << op_LeftShift
    >> op_RightShift
    
    Relational
    >  op_GreaterThan
    <  op_LessThan
    >= op_GreaterThanOrEqual
    <= op_LessThanOrEqual
    as (Not overloadable)
    is (Not overloadable)
    
    Equality
    == op_Equality
    != op_Inequality
    
    And
    &  op_BitwiseAnd
    
    Exclusive Or
    ^  op_ExclusiveOr
    
    Inclusive Or
    |  op_BitwiseOr
    
    Conditional And
    && (Not overloadable - use "implicit operator bool" or "operator true")
    
    Contional Or
    || (Not overloadable - use "implicit operator bool" or "operator true")
    
    Null-Coalescing Operator
    ?? (Not overloadable)
    
    Ternary
    ?: (Not overloadable - use "implicit operator bool" or "operator true")
    
    Assignment
    =  (Not overloadable - for combined operator and assignment (such as +=), just use the operator (+))
    

    注:C编译器首选 implicit operator bool 如果定义了这两个运算符,则不使用“真”和“假”运算符。

    根据参考文献 StackOverflow question 以下方法名也由C编译器发出/理解,但是

    • 我在Visual Studio 2015和C 6.0中运行了一些测试,试图使它们正常工作,以及
    • C 5.0规范列出了“一元(和二进制)运算符函数名的完整集合”(附录A,第469页),这些名称在其中没有出现。
    Unary
    &   op_AddressOf
    *   op_PointerDereference
    
    Binary
    .   op_MemberSelection
    ->  op_PointerToMemberSelection
    
        op_SignedRightShift
        op_UnsignedRightShift
    
    =   op_Assign
    *=  op_MultiplicationAssignment
    /=  op_DivisionAssignment
    %=  op_ModulusAssignment
    -=  op_SubtractionAssignment
    +=  op_AdditionAssignment
    <<= op_LeftShiftAssignment
    >>= op_RightShiftAssignment
    |=  op_ExclusiveOrAssignment
    &=  op_BitwiseAndAssignment
    |=  op_BitwiseOrAssignment
    
        op_UnsignedRightShiftAssignment
        op_SignedRightShiftAssignment
    
    ,   op_Comma
    
        4
  •  0
  •   AaronParkes    10 年前

    本网站提供了C运营商的名称列表,显示运营商、操作(名称)、示例和结果: C# Operator List