0 background
类型转换在写程序的时候用的比较多,经常出现这些个名次,不懂的话看的很懵,所以这次来一起总结一下这俩的区别。
1 隐式类型转换
原则:
1 不能损失精度,可以从低精度向高精度转换。
2 自定义对象可以隐式转为父对象。
发生情况
1 在混合类型的算术表达式中
2 用一种类型的表达式赋值
3 用一个表达式传递给一个函数调用
4 从一个函数返回一个表达式
前四点可以参考例子 http://developer.51cto.com/art/201002/183139.htm
5 可以用 形参调用构造函数,使从形参类型转为类对象类型。
class Test
{
public:
Test(int a);
bool isSame(Test other)
{
return m_val == other.m_val;
}
private:
int m_val;
}
Test a(10);
cout<<if(a.isSame(10))<<endl; //该语句将返回true
这个例子中的 isSame 是成员函数,用于两个对象之间的比较。但是形参为int时没有报错,是因为编译器在运行到这个函数时,形参int会调用类构造函数,生成一个临时对象,用于执行函数。
但是这里要注意,构造函数一定只有一个参数,或其他参数都有默认值。
禁用隐式类型转换:
禁用比较简单,对类的构造函数来说,在前面加上关键字 explicit 修饰即可。
2 显示类型转换
显示类型转换就是强制类型转换,在最前面用括号把目标值的类型括起来即可。
3 reference
http://developer.51cto.com/art/201002/183139.htm