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

猜你喜欢

转载自blog.csdn.net/mistakk/article/details/80279820
今日推荐