none
有关C++/CLI 某些方法编译后莫名其妙多出些东西的问题 RRS feed

  • 常规讨论

  • 我发现在C++/CLI里,如果一个方法的返回值是Boolean,编译器通常会给这个方法加点料,如下面的例子:

    Boolean Equals(Size rpSize) { return r_Width == rpSize.r_Width && r_Height == rpSize.r_Height; }

    上面这段代码编译后,用反编译工具反编译会成如下的样子(C#)

    [return: MarshalAs(UnmanagedType.U1)]
    public bool Equals(Size rpSize)
    {
        int this2;
        if (this.r_Width == rpSize.r_Width && this.r_Height == rpSize.r_Height)
        {
             this2 = 1;
        }
        else
        {
            this2 = 0;
        }
        return this2 != 0;
    }

    同样的也出现在重载==和!=运算符的方法里

    很明显,加料后的这个方法显得臃肿许多,和原本的方法比显得效率差些。我再对“PresentationCore.dll”和“Microsoft.Xna.Framework.dll”这两个同样是用C++/CLI写的程序集反编译,发现类似的方法没有加料

    那么既然都是用C++/CLI写的,为什么我的会出现这种情况呢?如果做才能不加料?

    2013年6月22日 8:58

全部回复