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

什么是起重作业人员?

  •  55
  • fletcher  · 技术社区  · 14 年前

    我在看 this article 我也在努力学习解释提升运算符的vb.net示例。似乎没有类似的C示例或教程。一般来说,我对运算符重载没有太多经验,因此在阅读可为空的类型时,尝试与vb.net等价物达成一致可能不是最好的开始…

    是否有人能够解释提升的运算符以及它们如何被可为空的类型使用?这是否仅仅意味着可以为空的类型本身不会重载运算符,并且将使用它所表示的基础类型中的运算符?

    似乎没有太多关于提升操作员的信息,所以希望这也能帮助其他人。

    1 回复  |  直到 6 年前
        1
  •  103
  •   Jon Skeet    9 年前

    提升运算符是通过“提升”已存在于不可空窗体上的运算符来处理可空类型的运算符。例如,如果您这样做:

    int? x = 10;
    int? y = 10;
    int? z = x + y;
    

    那个“+”操作员被提升了。它实际上不存在于 Nullable<int> 但是C编译器的作用就像它一样,生成代码来做正确的事情。(在大多数情况下,这是检查操作数是否为空的问题;如果为空,则结果为空。否则,将两个操作数都展开为不可为空的值,使用普通运算符,然后将结果包装回可为空的值。不过,在比较方面有一些特殊情况。)

    参见第6.4.2节(提升转换操作员)和第7.3.7节(提升操作员) C# spec 更多信息。