「这是我参与11月更文挑战的第1天,活动详情查看:2021最后一次更文挑战」
1、基本内置类型
C++基本数据类型包括算术类型,空类型
1.1算术类型
算术类型包括:字符、整型数、布尔值以及浮点数
-
字符:基本字符类型char,8位,1字节。扩展字符集包括wchar_t、char16_t、char32_t。
- wchar_t:宽字符,16位
- char16_t:Unicode字符,16位
- char32_t:Unicode字符,32位
-
整型:包含short、int、long、long long
- short:短整型,至少16位
- int:整型,至少16位,一般为32位
- long:长整形,至少为32位
- long long:长整形,至少为64位(C++11)
注意:整型可划分为有符号与无符号的,无符号整型能表示的数的范围是由符号的二倍,有符号整型最高位是符号位0表示正,1为负。明确知晓整型变量数值为非负时,选用无符号类型
- 布尔值(bool):真(true)、假(false)
- 浮点数:float、double、long double
- float:单精度浮点数、至少6位有效数字,有效位数为7位,float总大小为32位
- double:双精度浮点数、至少10位有效数字,有效位数为16位,float总大小为64位
- long double:扩展精度浮点数、至少10位有效数字,long double总大小一般为128位
1.2类型转换
编译器自动把一个类型转换为另一种相关类型
常见的类型转换
-
赋值
#include<iostream> int main(int argc, char const* argv[]) { float x = 1.302; int y = x; //1 bool z = y; //true double a = z; //1.0 unsigned int b = -1;//2进制对应的无符号值,0xFFFFFFFF int c =2e32;//未初始化,vc2019c被初始化为0; std::cout <<x<<'\n' << y << '\n' << z << '\n' << a << '\n' << b << '\n' << c << std::endl; return 0; } -
判断
int key=302; if(key){}//key的值自动转换为bool类型,key不会变化
注意:
- 不能将无符号是否小于0来作为循环条件,因为无符号数永远不会小于零
1.3字面值常量
- 整型、浮点型、字符、字符串型字面量
顾名思义就是具体的数,字符,字符串,布尔值。比如:2,4,6,8,3.14,0xff,“hello world”等等
- 转义序列
泛化的说就是由\和其他字符组成的转义序列,比如'\t','\n',"\tHHH"
- 指定字面量类型
//字符/字符串
前缀+字符/字符串 u -> char16_t ; U -> char16_t ; L -> wchar_t ;u8 -> char
//整型/浮点型
整型/浮点型+后缀 整型: u/U -> unsigned; l/L -> long ; ll/LL -> long long
浮点型: f/F->float; l/L -> long double
- 布尔与指针字面值
bool:true、false。指针:nullptr(C++11)
2、变量
变量(variable)和对象(object)可以理解为一个意思
2.1变量定义
- 初始化
当对象在创建时获得了一个特定的值,我们说这个对象被初始化。
注意:初始化不是赋值,初始化的含义是创建变量时赋予其一个初值,而赋值是,擦除当前值写入新值
- 列表初始化 list initialization
比如:
vector<int> x{1,2,3,4};
int c={2};
注意:列表初始化若存在丢失信息的风险,编译器就会报错,比如
int c={2.5};
- 默认初始化
任何函数体外部变量未显示初始化都会默认初始化为零,任何函数体内部变量未显示初始化则不被初始化,若访问或者拷贝此变量则编译器会报错
2.2变量声明定义
变量声明在变量名前添加extern关键字
extern char o;//声明
char j;//定义
变量可以多次声明不能被多次定义
2.3标识符
即变量名,由字母数字下划线组成,必须以字母或下划线开头,对大小写敏感,不能与关键字冲突,可以进行驼峰命名法或下划线命名法
2.4名字作用域
一般以花括号为界,可以传递至内层括号(若名字冲突,则以内层为准),不能向外层括号传递
#include<iostream>
#include<vector>
int cd;
int main(int argc, char const* argv[])
{
unsigned int i = 10,l=30;
int j =-20;
j = i +j;
{
int j = 30;
std::cout << j << std::endl;
}
std::vector<int> x{ 1,2,3,4 };
std::cout << cd<< std::endl;
return 0;
}
输出为30,-10
把外层作用域命名则可以通过域名以及域作用符号来访问外层变量
#include<vector>
namespace JJJ {
int j = -20;
}
int cd;
int main(int argc, char const* argv[])
{
unsigned int i = 10,l=30;
int j = -20;
j = i +j;
{
int j = 30;
std::cout <<JJJ::j << std::endl;
}
std::vector<int> x{ 1,2,3,4 };
std::cout << j<< std::endl;
return 0;
}