Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/127.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ C+中的模糊函数重载+;?_C++ - Fatal编程技术网

C++ C+中的模糊函数重载+;?

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

我有一个类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;
}
从代码上看,它看起来并不模棱两可。但我不想在编译过程中看到这个警告。有人能告诉我吗

  • 为什么我得到这个警告,即使我有类型铸造大小为int
  • 这是否是一个错误,而不是GCC上的警告

  • 代码不正确。转换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)。