我有以下最小代码:

using namespace System;

long get_prop( Object^ v )
{
    return Convert::ToInt32( v );
}

int main()
{
    Object^ o1 = gcnew Int32( -1 );
    Object^ o2 = gcnew UInt32( 0xFFFFFFFF );
    long value1 = get_prop( o1 );
    long value2 = get_prop( o2 );

    return 0;
}

它给出了 OverflowException 例外 get_prop 功能。最后,我需要使用 get_prop 在纯C ++代码中。什么是正确的写作方法 get_prop 功能使其在两种情况下都可以无一例外地工作。我可以在C ++中使用某种模板或其他琐碎的解决方案吗?

有帮助吗?

解决方案

hmya,您正在尝试在31位戳中塞入32位猪。此代码最终调用Convert :: TOINT32(UINT32值),该代码看起来像这样:

public static int ToInt32(uint value)
{
    if (value > 0x7fffffff)
    {
        throw new OverflowException(Environment.GetResourceString("Overflow_Int32"));
    }
    return (int) value;
}

kaboom。不确定您想要什么样的溢出行为,但这使编译器可以忽略并避免例外:

long get_prop( Object^ v )
{
    return (long)Convert::ToInt64( v );
}
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top