可以复制构造函数是转换运算符吗?

时间:2012-09-14 15:22:24

标签: c++

请考虑以下代码。

#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 (); 

}

测试(const测试&amp; t) - &gt;是一个复制构造函数

问题:

是否与“转换运算符”相同? 测试t3 = t2 [此处复制构造函数被视为转换运算符]

我不确定我的理解是否正确?如果我错了,请纠正我?

3 个答案:

答案 0 :(得分:2)

 Test t3=t2;

如果copy c-torexplicit,则永远不应编译。

n3337 12.3.1 / 3

非显式复制/移动构造函数(12.8)是转换构造函数。隐式声明的复制/移动 构造函数不是显式构造函数;可以调用隐式类型转换。

此引用似乎是以下问题:Implicit copy constructor

因此,在您的情况下,它不是转换构造函数。

答案 1 :(得分:1)

在C ++中,术语转换意味着两种不同的类型:源类型目标类型

根据定义,复制构造函数只涉及一种类型:源类型和目标类型相同。所以它不能称为转换函数。

答案 2 :(得分:-3)

当你使用T t3 = t2时。它将调用您尚未定义的赋值运算符。