最近在学习v8,需要学习一些c++,所以整理了一些c++的知识点。这次主要整理的是c++的类型转换。c++的类型转换可以简单理解分为两类: 简单类型转换和复杂类型转换。
简单类型转换
简单类型转化可以分为隐式转换和强制转换。比如int 转换为double,那么这个叫隐式转换。比如double 转换为int , double转化为int。例如:
int a = 1;
double b = 2.5;
int c = a + b;
上面的例子是c++编译器根据内部的规则自动隐私转化的。比如a先转化为double, double a再和double b相加,求和再转化为int赋值给c。
强制类型转换,就是用户刻意告诉编译器进行强制转换。比如:
int a = 1;
int *b = &a;
double *c = (double *) b;
上面的例子是指针类型的强制转化,因为整数和小数的内存存在有很多的区别,没有进行强制转换,c++编译器认为有风险,会报错。当我们使用强制转换时候,c++编译器认为我们了解这种风险,就会进行转换。
复杂类型转化
复杂的类型转换是c++编译器没有内置这些转换规则,比如double转化为类实例,这种需要用户自己定义的转换,而且只能使用在类上面,是一种复杂的类型转换。例如:
class Test {
public:
Test(int a, int b = 0) :_a(a), _b(b);
private:
int _a;
int _b;
};
int main(int args[]) {
Test t(1, 2);
t = 10;
return t
}
以上 t = 10;就是用户自定义的复杂的类型转换,因为c++编译器没有整数转换为类实例的规则。所以要想正确执行,需要用户自己定义转换的函数,因此,这种转换也可以叫做自定义类型转换构造函数。 那么假如要进行类实例转化为double呢,这种叫做类型转换函数。主要通过重载运算符operator type进行实现的。例如:
class Test {
public:
Test(int a) : _a(a);
operator int() const {
return _a;
}
private:
int _a;
};
int main(int args[]) {
Test t(10);
int a = t;
}
上面的例子就是把Test的实例转化为int类型。这种叫做类型转换函数。 以上就是c++的类型转换的内容。