当我尝试使用VC ++ 2015编译一些非常类似的代码时,我得到了一个:
C2664无法将参数编号1从'unsigned int'转换为'short&'
class Foo
{
public:
unsigned int A;
unsigned int B;
}
void foo(short& a)
{
a++;
}
void main()
{
Foo f;
foo(f.A);
}
投射它的正确方法是什么?
答案 0 :(得分:1)
使用强制转换无法执行此操作,因为unsigned int
不能别名为short
。要在不更改的情况下调用此foo
,代码将为:
if ( f.A > SHRT_MAX )
throw std::runtime_error("existing value out of range for short");
short sh = f.A;
foo(sh);
f.A = sh;
您可能需要先检查sh >= 0
,然后再将其重新分配给f.A
;并且foo
应该防止整数溢出。