本文同时发布在我的个人博客上:https://dragon_boy.gitee.io
内置的C++类型分两组:基本类型和复合类型。
简单变量
变量名
C++命名规则:
- 在名称中只能使用字母字符、数字和下划线。
- 名称的第一个字符不能是数字。
- 区分大写字符与小写字符。
- 不能将C++关键字用作名称。
- 以两个下划线或下划线和大写字母打头的名称被保留给实现(编译器及使用的资源)使用。以一个下划线开头的名称被保留给实现,用作全局标识符。
- C++对于名称的长度没有限制。
整型
整数就是没有小数部分的数字。C++基本整型分别是char,short,int,long和long long。
整型short、int、long、long long
计算机内存是由一些叫做位的单元组成。C++的short、int、long、long long通过使用不同数目的位来存储值。C++有一种相关标准:
- short至少16位。
- int至少与short一样长。
- long至少32位,且至少与int一样长。
- long long至少64位,且至少与long一样长。
一个字节8位
sizeof运算符可以指出类型名的字节数。
无符号类型
无符号类型用unsigned修饰,unsigned本身是unsigned int的缩写。例如,short范围是-32768到32767,无符号版本是0-65535。如果某一类型的值超过了限制,其值将为范围另一端的取值。
整型字面值
C++有三种计数方式来书写整数。第一位为1-9则为十进制,第一位为0,第二位为1-7则为八进制,前两位为0x则为16进制。
C++如何确定常量类型
除非有理由存储为其它类型(如使用特殊的后缀来表示特定的类型,或者值太大,并不能存储为int),否则C++将整型常量存储为int类型。
后缀是放在数字常量后面的字母,用于表示类型。整数后的L或l表示为long,u或U表示为unsigned int,其它的以此类推。
char类型
char类型是一种整型,他足够长,能够表示目标计算机系统中的所有基本符号。除此类型外,C++还提供wcha_t,char16_t和char32_t等类型,长度更大。
bool类型
C++将非零值解释为true,将零解释为false。
字面值true和false都可以通过提升转换为int类型,true被转换为1,false被转换为0.另外,任何数字值或指针值都可以被隐式转换为bool值。
const限定符
const int Months = 12;
常量Months被初始化后,其值被固定了,编译器将不允许再修改该常量的值。
浮点数
浮点类型数字诸如3.14159等。
书写浮点数
C++有两种浮点数表示方法,第一种是常用标准小数点表示法:如12.34,3.14159等。
第二种是E表示法,En即,如2.52e+8,8.33E-4。
浮点类型
C++有三种浮点类型:float、double和long double。float至少32位,double至少48位,且不少于float,long double至少和double一样多。
浮点常量
默认情况下,8.24等浮点常量都是double类型,如果希望为float,则后缀f,long double则后缀l。
C++算数运算符
C++提供了几种基本运算符来完成5中基本的算术计算:加减乘除、求模。(+-*/%),%要求两个操作数为整型。
运算符优先级和结合性
先乘除后加减这不用说。
除法分支
如果除法的两个操作数都是整数,C++将执行整数除法,即结果小数部分被丢弃,如果有一个操作数是浮点值,则小数部分被保留。
类型转换
C++自动执行很多类型转换:
- 将一种算数类型的值赋给另一种算数类型的变量时,C++将对值进行转换。
- 表达式中包含不同的类型时,C++将对值进行转换。
- 将参数传递给函数时,C++将对值进行转换。
初始化和赋值进行的转换
C++允许将一种类型的值赋给另一种类型的变量。这样做时,值将被转换为接受变量的类型,例如,假设so_long的类型为long,thirty的类型为short:
so_long = thirty;
进行赋值时,程序将thirty的值扩展为long,扩展后的值存储在so_long中,而thirty的内容不变。
将一个值赋给取值范围更大的类型通常不会导致什么问题,但反之就会出现精度问题。潜在的数值转换问题:
转换 | 潜在的问题 |
---|---|
将较大的浮点类型转化为较小的浮点类型,如将double转换为float | 精度降低,值可能超出目标类型的取值范围,在这种情况下,结果将是不确定的 |
将浮点类型转换为整型 | 小数部分丢失,原来的值可能超出目标类型的取值范围,在这种情况下,结果将是不确定的 |
将较大的整型转换为较小的整型,如将long转换为short | 原来的值可能超出目标类型的取值范围,通常只复制右边的字节 |
表达式中的转换
当同一个表达式中包含两种不同的算数类型时,C++将执行两种自动转换:首先,一些类型在出现时便会自动转换;其次,有些类型在与其它类型同时在表达式中时将被转换。
先是自动转换,在计算表达式时,C++将bool、char、unsigned char、signed char和short值转换为int,true被转换为1,false被转换为0。这些转换被称为整型提升。
传递参数时的转换
传递参数时的类型转换通常由C++函数原型控制,然而,也可以取消原型对参数传递的控制。在这种情况下,C++将char和short类型应用整型提升。
强制类型转换
强制类型转换并不会改变值本身,而是会产生一个新的值,可以用在表达式中。通用格式:
(typeName) value
typeName (value)
auto声明
auto可以自动根据初始值的类型推断变量的类型。
总结
C++的基本类型分为两组:一组由存储为整数的值组成,另一组由存储为浮点格式的值组成。整型之间通过存储值时使用的内存量及有无符号来区分。整型从最小到最大依次是:bool、char、signed char、unsigned char、short、unsigned short、int、unsigned int、long、unsigned long以及long long、unsigned long long。还有wchar_t,C++11新增char16_t和char32_t。
字符通过其数值编码来实现。I/O系统决定了编码是被解释为字符还是数字。
浮点类型可以表示小数值以及比整型能够表示的值大得多的值。三种类型为float、double、long double。C++确保float不比double长,而double不比long double长。通常,float使用32位内存,double使用64位内存,long double使用80到128位。
通过提供各种长度不同、有符号或无符号的类型,C++使程序员能够根据特定的数据要求选择合适的类型。
C++使用运算符来提供对数字类型的算术运算:加减乘除和求模。当两个运算符对同一操作数进行操作时,C++的优先级和结合性规则可以确定先执行哪种操作。
对变量赋值、在运算中使用不同类型、使用强制转换时,C++将把值从一种类型转换位另一种类型。很多类型转换是安全的,但有些需要小心。
网友评论