-3

クラス A があり、実際にオーバーロードされている 2 つのメソッド 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 に答える