C++ C+中的模糊函数重载+;?
我有一个类a,它有两个方法foo,它们实际上是重载的。这个班看起来有点像这样C++ C+中的模糊函数重载+;?,c++,C++,我有一个类a,它有两个方法foo,它们实际上是重载的。这个班看起来有点像这样 class A { public: bool foo(int& a); bool foo(size_t& a); }; bool A::foo(int& a) { return true; } bool A::foo(size_t& a) { int new_a = a; return foo(new_a); // here Cl throw
class A
{
public:
bool foo(int& a);
bool foo(size_t& a);
};
bool A::foo(int& a)
{
return true;
}
bool A::foo(size_t& a)
{
int new_a = a;
return foo(new_a); // here Cl throws me warning C4717: 'hweudm::UDMAbstractBaseEntity::SetAttribute' : recursive on all control paths, function will cause runtime stack overflow
}
int main()
{
A aObj;
size_t val = 12;
aObj.foo(val);
return 0;
}
从代码上看,它看起来并不模棱两可。但我不想在编译过程中看到这个警告。有人能告诉我吗
代码不正确。转换cast
(int)a
的结果是一个右值,它不能绑定到任何一个左值引用
如果不是可怕的未定义行为,唯一接近的事情是类似于
foo(reinterpret\u cast(a))
,但不要这样做,因为这是不正确的。不是大小
:
typedef unsigned int size_t;
??那么A::foo(int&A)和A::foo(size\u t&A)就是代码无法编译的东西;请显示您的实际代码。不,不是<代码>大小\u t是无符号类型,因为大小不能为负。否!1.
size\u t
是“一种基本无符号整数类型的别名”,不一定是unsigned int
(例如可以是unsigned long
)。2.即使在定义为typedef的实现中,int&
(即signed int&
)和unsigned int&
也不是一回事,它们是两种不同的、不兼容的类型。当编译为64位时,size\u t也可能是64位(即unsigned long long)。