C语言中纯在如下的转换
unsigned int ui = 1000;
int i = -2000;
cout << ui + i << endl; //是个正数, int 隐式类型转换成了unsigned int
short s = 'a';
cout << "sizeof(s + 'b') = " << sizeof(s + 'b') << endl;
// = 4 编译器认为int类型的运算效率高 所以两个类型都转换成int了
普通类型与类类型之间能否进行类型转换?类类型之间能否进行类型转换?
转换构造函数的定义:
class Test
{
int m_value;
public:
Test()
{}
Test(int i) // 转换构造函数(其实就是带有一个参数的构造函数)
{}
Test operator +(const Test& p)
{
Test ret(m_value + p.m_value);
}
int value()
{
return m_value;
}
};
Test t;
t = 5; // 编译器进行了隐式类型转换 t = Test(5);
Test r;
r = t + 10 // 编译能通过, 编译器默认进行了 r = t + Test(10);
编译器进行如下过程:
做了隐式类型的转换(调用构造函数)
class Test
{
int mValue;
public:
Test()
{
mValue = 0做了隐式类型的转换(调用构造函数);
}
explicit Test(int i) // 杜绝编译器的隐式类型转换
{
mValue = i;
}
Test operator + (const Test& p)
{
Test ret(mValue + p.mValue);
return ret;
}
int value()
{
return mValue;
}
};
Test t;
t = static_cast<Test>(5); // 或者 t = (Test)(5);
Test r;
r = t + static_cast<Test>(10); // // r = t + Test(10);
cout << r.m_value << endl; // 15;
注:根据狄泰课程做的笔记