请考虑以下代码。
#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 [此处复制构造函数被视为转换运算符]
我不确定我的理解是否正确?如果我错了,请纠正我?
答案 0 :(得分:2)
Test t3=t2;
如果copy c-tor
为explicit
,则永远不应编译。
n3337 12.3.1 / 3
非显式复制/移动构造函数(12.8)是转换构造函数。隐式声明的复制/移动 构造函数不是显式构造函数;可以调用隐式类型转换。
此引用似乎是以下问题:Implicit copy constructor
因此,在您的情况下,它不是转换构造函数。
答案 1 :(得分:1)
在C ++中,术语转换意味着两种不同的类型:源类型和目标类型。
根据定义,复制构造函数只涉及一种类型:源类型和目标类型相同。所以它不能称为转换函数。
答案 2 :(得分:-3)
当你使用T t3 = t2时。它将调用您尚未定义的赋值运算符。