0

次のコードを検討してください。

#include <iostream>

using namespace std;


class Test
{
        private:
                int x,y;
        public:
                Test () {
                        cout <<" Inside Constructor "<<endl;
                        x=100;
                }   
                explicit Test (const Test & t)
                {   
                        cout <<"Inside Copy Constructor "<<endl;
                        x = t.x;
                }   
                void display()
                {   
                        cout <<" X is "<<x<<endl;
                }   

};



int main (int argc, char ** argv){
  Test t;
  t.display(); 

 cout <<"--- Using Copy constructor "<<endl;
 Test t2(t);
 t2.display (); 

 Test t3=t2;
 t3.display (); 

}

Test (const Test & t) -> はコピー コンストラクターです

質問:

「変換演算子」と同じものを使用していますか? テスト t3 = t2 [ここでは、コピー コンストラクターが変換演算子として扱われます]

私の理解が正しいかどうかわかりませんか?私が間違っている場合は、親切に修正してください。

4

3 に答える 3

2
 Test t3=t2;

の場合、コンパイルしないcopy c-torexplicitください。

n3337 12.3.1/3

非明示的なコピー/移動コンストラクター (12.8) は、変換コンストラクターです。暗黙的に宣言されたコピー/移動コンストラクターは、明示的なコンストラクターではありません。暗黙的な型変換のために呼び出される場合があります。

この引用は次の質問に現れます: Implicit copy constructor

したがって、あなたの場合、それは変換コンストラクターではありません。

于 2012-09-14T15:25:59.723 に答える
1

C++ では、変換という用語は、ソース タイプ宛先タイプという 2 つの異なるタイプを意味します。

コピー コンストラクターは、定義上、1 つの型のみを含みます。ソース型と宛先型は同じです。したがって、変換機能とは言えません。

于 2012-09-14T15:27:31.047 に答える
-3

T t3 = t2 を使用する場合。定義していない代入演算子を呼び出します。

于 2012-09-14T15:25:13.713 に答える