C++ 如何强制转换变量成员以将其作为函数的引用参数传递

C++ 如何强制转换变量成员以将其作为函数的引用参数传递,c++,C++,当我尝试用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); } 什么是正确的强制转换方法?不可能对强制转换执行此操作,因为无符号i

当我尝试用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);
}

什么是正确的强制转换方法?

不可能对强制转换执行此操作,因为
无符号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;

在将其重新分配给f.A之前,您可能需要检查
sh>=0
;而且
foo
应该防止整数溢出。

那是行不通的。引用必须始终是有效的对象,并且没有有效的方法通过引用将无符号int变为短整数。在我看来,重写函数以处理实际要传递给它的内容会更好。或者添加一个函数重载。抱歉,这只是一个例子,我有一个需要强制转换的工作代码,这是不可能的吗?强制转换一个通过引用传递的变量肯定属于未定义行为的领域。明白了,我相信我可以使函数重载我最终编写了一个重载。不过答案很好