C/C++ 隐式 和 显式 类型转换

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

经验分享 程序员 微信小程序 职场和发展