-3

我有一个 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 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;
}

从代码来看,它看起来并不模棱两可。但我不想在编译期间出现这个警告。谁能告诉我

  1. 为什么即使我已将 size_t 类型转换为 int 也会收到此警告?
  2. 这是否会是错误而不是 GCC 的警告。
4

2 回答 2

3

代码不正确。转换强制转换的结果(int)a是一个右值,它不能绑定到任何一个左值引用。

如果它不是可怕的未定义行为,唯一会接近的事情是类似的foo(reinterpret_cast<int &>(a)),但不要这样做,因为它是不正确的。

于 2013-05-27T09:42:22.447 回答
0

不是size_t

typedef unsigned int size_t;

? 那么 A::foo(int& a) 和 A::foo(size_t& a) 是完全一样的

于 2013-05-27T09:47:07.943 回答