C++冲刺(二)内置类型转换
2014-08-15 09:35
218 查看
C++定义了一组内置类型对象之间的标准转换,在必要时它们被编译器隐式地应用到对象上。
隐式类型转换发生在以下几种情况:
1.在混合类型的算术表达式中。在这种情况下最宽的数据类型成为目标转换类型,这也被称为算术转换。
2.用一种类型的表达式赋值给另一种类型的对象
3.把一个表达式传递给一个函数,调用表达式的类型与形式参数的类型不相同
4.从一个函数返回一个表达式的类型与返回类型不相同
算术转换保证了二元操作符,如加法或乘法的两个操作数被提升为共同的类型,然后再用它表示结果的类型。两个通过的指导原则如下:
1.防止精度损失,如果必要的话,类型总是被提升为较宽的类型
2.所有含有小于整型的有序类型的算术表达式在计算之前其类型都会被转换成整型。(整值提升)
规则定义如上面所述,这些规则定义了一个类型转换层次结构。浮点类型转换优先级从高到低为:long double->double->float,一个操作数为以上三个之一,则另一个也将被转换为相同的类型。否则如果两个操作数都不是3种浮点类型之一,他们一定是某种整值类型。在确定共同的目标提升类型之前,编译器将在所有小于int的整值类型上施加一个被成为整值提升的过程。在进行整值提升时类型char、signed
char、unsigned char和short int都被提升为类型int。如果机器上的类型空间足够表示所有unsigned short型的值,这发生在short用半个字而int用一个字表示的情况下,则unsigned short int也被转换为int,否则它会被提升为unsigned int。wchar_t和枚举类型被提升为能够表示其底层类型所有值的最小整数类型。整型类型转换优先级从高到低为:unsigned
long->long->unsigned int->int。long转型有一个例外,如果一个是long而另一个是unsigned long,则一般long长度不足以存放unsigned int所有值,此时两个都被提升为unsigned long型。若两个都不是long型而其中一个是unsigned int,则另一个也被转换成unsigned int,否则两个操作数一定都是int型。
隐式类型转换发生在以下几种情况:
1.在混合类型的算术表达式中。在这种情况下最宽的数据类型成为目标转换类型,这也被称为算术转换。
2.用一种类型的表达式赋值给另一种类型的对象
3.把一个表达式传递给一个函数,调用表达式的类型与形式参数的类型不相同
4.从一个函数返回一个表达式的类型与返回类型不相同
算术转换保证了二元操作符,如加法或乘法的两个操作数被提升为共同的类型,然后再用它表示结果的类型。两个通过的指导原则如下:
1.防止精度损失,如果必要的话,类型总是被提升为较宽的类型
2.所有含有小于整型的有序类型的算术表达式在计算之前其类型都会被转换成整型。(整值提升)
规则定义如上面所述,这些规则定义了一个类型转换层次结构。浮点类型转换优先级从高到低为:long double->double->float,一个操作数为以上三个之一,则另一个也将被转换为相同的类型。否则如果两个操作数都不是3种浮点类型之一,他们一定是某种整值类型。在确定共同的目标提升类型之前,编译器将在所有小于int的整值类型上施加一个被成为整值提升的过程。在进行整值提升时类型char、signed
char、unsigned char和short int都被提升为类型int。如果机器上的类型空间足够表示所有unsigned short型的值,这发生在short用半个字而int用一个字表示的情况下,则unsigned short int也被转换为int,否则它会被提升为unsigned int。wchar_t和枚举类型被提升为能够表示其底层类型所有值的最小整数类型。整型类型转换优先级从高到低为:unsigned
long->long->unsigned int->int。long转型有一个例外,如果一个是long而另一个是unsigned long,则一般long长度不足以存放unsigned int所有值,此时两个都被提升为unsigned long型。若两个都不是long型而其中一个是unsigned int,则另一个也被转换成unsigned int,否则两个操作数一定都是int型。
相关文章推荐
- C++内置数字数据类型与string间的转换--以double为例
- 用标准C++进行string与各种内置类型数据之间的转换
- 用标准c++进行string与各种内置数据类型的转换(转)
- 用标准C++进行string与各种内置类型数据之间的转换
- 用sstream实现C++中的内置类型转换
- C++的内置类型和用户自定义类型的互相转换
- C++内置类型对象转换
- C/C++ 内置类型转换注意点
- C++冲刺(一)内置数据类型大小
- C++中的内置类型以及类型转换
- C++内置类型对象之间的转换
- C++内置类型对象之间的隐式转换
- C++ - 内置类型对象之间的标准转换
- 用标准C++进行string与各种内置类型数据之间的转换
- 用标准c++进行string与各种内置数据类型的转换
- 用标准C++进行string与各种内置类型数据之间的转换
- C++中的类型转换与类型识别 2
- 标准C++的类型转换符:static_cast、dynamic_cast、reinterpret_cast和const_cast(转载)
- C++类型中的转换--static_cast 和 reinterpret_cast
- 关于linux下C++中利用socket时的数据类型转换错误