[基本] C++中隐式转换

来源:互联网 发布:淘宝店美人药妆害死人 编辑:程序博客网 时间:2024/04/30 03:26
在C或者C++语言当中,尝尝涉及到隐式转换问题:

我总结主要有以下几种情况:

1. 在混合类型的算术表达式中
int ival = 3;  double dval = 3.1415  ival + dval; //ival 被提升为double 类型:3.0 


2.用一种类型的表达式赋值
?
代码
01
int*pi = NULL; // NULL(0)被转换成了int* 类型的空指针值


3.用一个表达式传递给一个函数调用
?
代码
01
02
externdouble sqrt(double); 
sqrt(2);//2被提升为double类型: 2.0


4.函数返回值
double difference(int ival1, int ival2)  {      return ival1 - ival2; //返回值被提升为double 类型. } 


C++内建类型(char,int,short,double etc.)对像之间默认含有隐式转换

5. C++用户定义类对象之间可以含有C++隐式转换
void dosomething(A aObject);  class A {  public:  A(int x = 0);  }  dosomething(20); // Ok 隐式转换 


在C++除了以上的方式还有2种方式进行隐式转换:主要是通过在类里面定义转换函数可以将类类型转换为其他类型
这里用一个简单的例子说明一下:
?
代码
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
classInt{
private:
        intvalue;
public:
 
        Int(){
                value="0";
        }
 
  operatorint()const{
  returnvalue;
  }
};
voidfunc(inti)
{
        cout<<i<<endl;
}
 
voidmain()
{
        intv
        func(v);
        v+= 6;//error
        cout << v;
}
原创粉丝点击