C++ 如何强制转换变量成员以将其作为函数的引用参数传递
当我尝试用VC++2015编译一些与此非常类似的代码时,我得到一个: C2664无法将参数编号1从“unsigned int”转换为“short&”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
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变为短整数。在我看来,重写函数以处理实际要传递给它的内容会更好。或者添加一个函数重载。抱歉,这只是一个例子,我有一个需要强制转换的工作代码,这是不可能的吗?强制转换一个通过引用传递的变量肯定属于未定义行为的领域。明白了,我相信我可以使函数重载我最终编写了一个重载。不过答案很好