隐式和显式初始化
a) C++隐式初始化
int ival(1024);
string hello("hello rookie");
b) C++显式初始化
int val = 1024
string hello = "hello rookie"
*这里的“=”语法是拷贝构造函数,而不是赋值运算。
因为一个新对象被定义一定要有一个构造函数而不是一个赋值操作
string hello;
hello = “hello rookie”; <-这里hello已经被定义了,才是赋值操作。
隐式类型转换:
一般情况下,数据的类型的转换通常是有编译系统自动进行的,不需要人工干预,所以被称为隐式类型转换。
C++隐式转换发生在四种情况下:
a) 在混合类型的算数表达式中
int val = 3;
double dval = 3.1415;
ival + dval ;//ival被提升为double类型:3.0
b) 用一种类型的表达式赋值
int *p1 = NULL;//NULL(0)被转换成了int *类型的空指针值。
c) 用一个表达式传递给一个函数调用
extern double sqrt(double);
sqrt(2);//2被提升为double类型:2.0
d) 从一个函数返回一个表达式
double difference(int val1,int val2)
{
return val1-val2;//返回值被提升为double类型。
}
C++用户定义类对象之间可以含有隐式转换
void dosomething (A aobject);
class A{
public:
A(int x=0);
}
dosomething(20);//隐式转换
显示类型转换:
当程序要求一定要将某一类型的数据转换为另外一种类型,则可以利用强制类型转换运算符转换,这种强制转换过程称为显式转换。
显式类型转换格式为:
(强制类型名)表达式
用于强行将“表达式”的值转换成“类型名”所表示的数据类型。例如,(int)4.2的结果就是4;强制类型转换的目的是使表达式的值的数据类型发生改变,从而使不同类型数据之间的运算能够进行下去。
自动类型转换:
也称为显式类型转换,是指不需要书写代码,由系统自动完成类型转换。C++内建类型(char ,int ,short,double etc)对象之间默认含有隐式转换。
转换规则:
从存储范围小的类型到存储范围大的类型
具体规则:
short(char)->int->long->float->double
也就是说int类型的变量可以自动转换为long类型,
int b = 10;long l = b;