2012-03-19 13 views
0

次のコードは正常に動作します。ユーザー定義型への暗黙的変換

class A 
{ 
    private: 
    int _value; 
    public: 
    class AProxy 
    { 
    public: 
    AProxy(int num):_num(num){} 
    int _num; 
    }; 
    A(AProxy x):_value(x._num){} 
    int getvalue(){ 
     return _value; 
    } 
}; 

void func(A a) 
{ 
    cout<<"A is initialized with "<<a.getvalue()<<endl; 
} 

int main() 
{ 
    A a(10); 
    return 0; 
} 

(10)(Aproxy(10))に変換される

しかし、次のコードは動作しません。

class A 
{ 
    private: 
    int _value; 

    public: 
    class AProxy 
    { 
    class AAProxy 
    { 
    public: 
    AAProxy(int num):_aanum(num){} 
    int _aanum; 
    }; 
    public: 
    AProxy(AAProxy aa):_num(aa._aanum){} 
    int _num; 
    }; 
    A(AProxy x):_value(x._num){} 
    int getvalue(){ 
     return _value; 
    } 
}; 

void func(A a) 
{ 
    cout<<"A is initialized with "<<a.getvalue()<<endl; 
} 

int main() 
{ 
    A a(10); 
    return 0; 
} 

a(Aproxy(AAproxy(10))))。したがって、intからユーザー定義の型への暗黙の変換は、一度だけ発生しますか?

+1

あなたの2つのコードは同じです。どうしたの? –

+1

あなたのコードには 'AAproxy'と呼ばれるものは何もありません。暗黙の変換演算子もありません。変換演算子*はコンバート*です。 – Jon

+0

申し訳ありません。コピー貼り付けエラーがありました。コードを確認します。 – vamsi

答えて

2

タイプA(それが何であるか)からタイプB(直接的なもの)に直接変換されます。 AからCをBに変換するにはあまりにも多くの方法があり、それが問題であれば問題は無限になります。あいまいさがすぐにそのように浮かび上がることは言うまでもありません。

0

ほとんどの暗黙のユーザー定義変換を取得します。

1

C++標準では、言語は1レベルの暗黙的変換でユーザータイプの切断を解決するよう試みます。 > 1レベルでは明示的な変換が必要です。

関連する問題