1.基本内置类型,可以分为两种:
- 空类型(void)
- 算术类型:
- 整型(字符、布尔值、整型数);此外除了布尔值和扩展的字符型,整型又可分为带符号和无符号两类
- 浮点型
2.类型转换
- 非布尔类型赋值给布尔类型:初始值为0则为true,否则为false;
- 布尔类型赋值给非布尔类型:false为0,true为1
- 浮点数类型赋值给整数类型:保留小数点前的部分
- 整数类型赋值给浮点类型:小数部分记为0
- 给无符号类型赋值为一个超出其表示范围的值: 初始值对无符号类型表示数值总数取模后的余数
- 给带符号类型赋值为一个超出其表示范围的值: 结果是未定义,导致程序继续工作或崩溃或产生垃圾数据
- 算数表达式中既有无符号数又有int值时,int值会转换为无符号数
3.字面值常量
字面值常量,字面意思,这样的值一望就知道
- 整型字面值 :
- 形式:十进制、八进制或十六进制
- 数据类型:(当前的类型要能容纳当前的数值)
十进制字面值类型是int、long和 long long中尺寸的最小者
八进制和十六进制字面值类型是int、unsigned int、long、unsigned long、long long 和unsigned long long 中的尺寸最小值
- 浮点型字面值 :一个小数或以科学计数法表示的指数
- 字符和字符串字面值 :
- char型字面值:单引号是括起来的一个字符
- 字符串型字面值:双引号括起来的零个或多个字符
实际上由常量字符构成的数组;
编译器会在每个字符串的结尾添加一个空字符 ‘\0’,那么,字符串字面值的实际长度比起内容多1
- 布尔字面值 :false和true
- 指针字面值 :nullptr
3.初始化
-
相关了解
变量: 提供一个具名的、可控程序操作的存储空间;每个变量都有其数据类型,数据类型决定变量所占内存空间的大小和布局方式、该空间能存储值的范围,以及变量能参与的运算
对象: 一块能存储数据并具有某种类型的内存空间
就地声明: 使用 = 加初始值;
C++98中可以使用就地声明的方式对类中静态成员常量进行初始化,而且要保证该静态常量是整型或枚举类型 -
始始化方式
- 小括号初始化:
int a(1); string b("hi");
- 等号初始化
double c = 1.2; string d = "hello";
- POD对象列表初始化
struct TestPod{ string data; int id; }; TestPod e = { "e0",0 }; TestPod f[] = { {"d0'",0},{"d1",1} }; cout << "e.data= " << e.data <<" e.id="<<e.id<< endl; for (TestPod e : f) { cout << e.data << "\t" << e.id << endl; }
- 构造函数初始化列表
class TestClass{ int x; int y; public: TestClass():x(0),y(0){} TestClass(int a,int b):x(a),y(b){} };
- 花括号列表初始化
注: 花括号的方式,若存在类型转换则有丢失信息的风险,编译器会报错——更安全TestClass g{1,2};//TestClass g(1,2); TestClass* h = new TestClass{3,4}; int i{2}; int i1 = {3}; int* j = new int[3]{5,6,7};//一定要记得不是圆括号
long double ld = 3.1415926536; int a1{ld},b1={ld};//报错 int c1(ld),d1=ld;//正确
- 小括号初始化: