C++的基本数据类型如下表所示(下表中列出的各类型的长度和取值范围,是指以面向80x86处理器的 Viusal C++ 2012 和 gcc 4.8.1 的长度,其它的编译器并不一定是这个长度)。
C++丰富的数据类型允许根据需要选择不同的类型,这也使得计算机的操作更复杂。
自动类型转换(隐式类型转换)
在下列四种情况中计算机自动进行类型转换:
在混合类型的算术表达式中
int ival = 3;
double dval = 3.1415
ival + dval; //ival 被提升为double 类型:3.0
用另外一种类型的表达式赋值
int *pi = NULL; // NULL(0)被转换成了int* 类型的空指针值
用一个表达式传递给一个函数调用
extern double sqrt(double);
sqrt(2); //2被提升为double类型: 2.0
从一个函数返回一个表达式
double difference(int ival1, int ival2)
{
return ival1 - ival2; //返回值被提升为double 类型.
}[8]
强制类型转换(显示类型转换)
C++显式转换包含四种转换:
static_cast:
用法:static_cast < type-id > ( expression )
说明:该运算符把expression转换为type-id类型,但没有运行时类型检查来保证转换的安全性。
dynamic_cast :
用法:dynamic_cast < type-id > (expression)
说明:该运算符把expression转换成type-id类型的对象。Type-id必须是类的指针、类的引用或者void*;
const_cast:
用法:const_cast (expression)
说明:该运算符用来修改类型的const或volatile属性。除了const 或volatile修饰之外, type_id和expression的类型是一样的。
C++丰富的数据类型允许根据需要选择不同的类型,这也使得计算机的操作更复杂。
自动类型转换(隐式类型转换)
在下列四种情况中计算机自动进行类型转换:
在混合类型的算术表达式中
int ival = 3;
double dval = 3.1415
ival + dval; //ival 被提升为double 类型:3.0
用另外一种类型的表达式赋值
int *pi = NULL; // NULL(0)被转换成了int* 类型的空指针值
用一个表达式传递给一个函数调用
extern double sqrt(double);
sqrt(2); //2被提升为double类型: 2.0
从一个函数返回一个表达式
double difference(int ival1, int ival2)
{
return ival1 - ival2; //返回值被提升为double 类型.
}[8]
强制类型转换(显示类型转换)
C++显式转换包含四种转换:
static_cast:
用法:static_cast < type-id > ( expression )
说明:该运算符把expression转换为type-id类型,但没有运行时类型检查来保证转换的安全性。
dynamic_cast :
用法:dynamic_cast < type-id > (expression)
说明:该运算符把expression转换成type-id类型的对象。Type-id必须是类的指针、类的引用或者void*;
const_cast:
用法:const_cast (expression)
说明:该运算符用来修改类型的const或volatile属性。除了const 或volatile修饰之外, type_id和expression的类型是一样的。