文章目录
- 一些基础知识点
- 指针和引用
一些基础知识点
1、十进制的数字比较长的时候,可以加'
方便阅读到底是几位,输出的时候跟不加是一样的效果
// 十进制可以加'
cout << 13'890'324 << endl; // 13890324
// 二进制前加0b
cout << 0b111 << endl; //7
// 八进制前加0
cout << 011 << endl; //9
// 十六进制前加0x
cout << 0xf1 << endl; //241(1*16^0 + f*16^1 = 241)
2、常量
- 直接使用,如
cout << 123 << endl;
const 类型 名字 {值}
或const 类型 名字 = 值
#define 名字 值
(没有分号)
3、变量定义赋值可以用{},(),=,但最好用大括号{},比较安全
// 如int赋值
int a = 7.5; // 编译自动变为7
int a { 7.5 }; // 编译不通过,不会降7.5自动变成7,安全
// 大括号内什么都不写则默认赋值为0
4、整型/浮点数的表达
二进制:0b11L
八进制:011L
十进制:121L
十六进制:0xf1L
后缀(推荐用大写)
- L/l:long型
- LL/ll:long long型
- U/u:无符号型,可以与L或LL组合使用,如65535ULL
float:F/f
如200.0F (不可以是200F)
不带后缀一律视为double,如200.0
后缀为L的浮点数视为long double,如200.0L
5、浮点数运算精确度要注意
float a{ 65923600.0 }, b{ 0.000001 }, c{ a + b };
cout << (a == c ? 1 : 0) << endl; // 1
cout << a << endl; // 6.59236e+07
cout << b << endl; // 1e-06
cout << c << endl; // 6.59236e+07// 这里精度丢失了,a和c是相等的
6、类型转换
类型转换顺序:
有的编译器里int与long是平级关系
int a{ 500 };
unsigned b{ 1000 };
cout << a - b << endl; // 4294966796,这里int转换为了unsigned int
long long a{ 500 };
unsigned b{ 1000 };
cout << a - b << endl; // -500,这里unsigned int转换为了long long
int a{ 500 };
unsigned b{ 1000 };
a -= b; //a-b为unsigned,但赋值给了a,转成了int,故结果为-500
cout << a << endl; // -500
int a{ 500 };
unsigned b{ 1000 };
// C中的强转
cout << (int)(a - b) << endl; // -500
// C++中的强转:static_cast<>()
cout << static_cast<int>(a - b) << endl;
7、字符
char charA{ 'A' };
cout << charA << endl; //Awchar_t wcharA{ L'a' };
cout << wcharA << endl; // 97
wcout << wcharA << endl; // wchar_t要用wcout,输出a// 没有支持char16_t和char32_t的输出,cout只能将其输出为数字
char16_t char16{ u'a' };
cout << char16 << endl; // 97char32_t char32{ U'a' };
cout << char32 << endl; // 97
注意一下另外三个字符类型要用L,u,U激活
wchar_t要显示中文需要
setlocale(LC_ALL, "chs");
8、推断类型
auto 变量名 {初始值}
查看一个变量的类型typeid(变量).name()
auto a{ 200 };
cout << a << endl; // 200
cout << typeid(a).name() << endl; // intauto b{ 100LL };
cout << b << endl; //100
cout << typeid(b).name() << endl;; // __int64auto c{ 100L };
cout << c << endl; //100
cout << typeid(c).name() << endl; // longauto e{ L'A' };
cout << e << endl; //65
cout << typeid(e).name() << endl; // wchar_tauto d{ U'A' };
cout << d << endl; //65
cout << typeid(d).name() << endl; // char32_t
9、格式化输出流及转义
格式化输出流操作 | |
---|---|
std::fixed | 以小数点模式输出浮点数,例如3.1415926 |
std::scientific | 以科学计数法输出浮点数,例如3E100 |
std::defaultfloat | 恢复默认的浮点数输出 |
std::setprecision(int) | 设置浮点数的精度,例如std::setprecision(2)后,输出 3.14 |
std::dec | 以后输出的数字采用十进制输出,例如999 |
std::hex | 以后输出的数字采用十六进制输出,例如FFF |
std::oct | 以后输出的数字采用八进制输出,例如777 |
std::showbase | 十六进制和八进制输出前显示前缀,例如0xFFF |
std::shownobase | 关闭十六进制和八进制显示前缀 |
std::setw(int) | 把输出内容设置宽度,例如std::setw(10) |
std::setfill(char) | 当显示宽度超过字符宽度时,用指定字符串填充剩余内容,例如std::setfill('*') |
std::left | 设置字符对齐模式为左对齐 |
std::right | 设置字符对齐模式为右对齐 |
红色部分需要使用相关头文件
#include <iomanip>
10、运算符优先级
C++运算符优先级表,从上到下,从左到右,优先级依次减弱。
优先级 | 运算符 | 说明 | 结合性 |
---|---|---|---|
1 | :: | 范围解析 | 自左向右 |
2 | ++ -- | 后缀自增/后缀自减 | |
() | 括号 | ||
[] | 数组下标 | ||
. | 成员选择(对象) | ||
-> | 成员选择(指针) | ||
3 | ++ -- | 前缀自增/前缀自减 | 自右向左 |
+ - | 加/减 | ||
! ~ | 逻辑非/按位取反 | ||
(type) | 强制类型转换 | ||
* | 取指针指向的值 | ||
& | 取某某的地址 | ||
sizeof | 取某某的大小 | ||
new, new[] | 动态内存分配/动态数组内存分配 | ||
delete, delete[] | 动态内存释放/动态数组内存释放 | ||
4 | .* ->* | 成员对象选择/成员指针选择 | 自左向右 |
5 | * / % | 乘法/除法/取余 | |
6 | + - | 加号/减号 | |
7 | << >> | 位左移/位右移 | |
8 | < <= | 小于/小于等于 | |
> >= | 大于/大于等于 | ||
9 | == != | 等于/不等于 | |
10 | & | 按位与 | |
11 | ^ | 按位异或 | |
12 | | | 按位或 | |
13 | && | 与运算 | |
14 | || | 或运算 | |
15 | ?: | 三目运算符 | |
16 | = | 赋值 | 自右向左 |
+= -= | 相加后赋值/相减后赋值 | ||
*= /= %= | 相乘后赋值/相除后赋值/取余后赋值 | ||
<<= >>= | 位左移赋值/位右移赋值 | ||
&= ^= |= | 位与运算后赋值/位异或运算后赋值/位或运算后赋值 | ||
17 | throw | 抛出异常 | |
18 | , | 逗号 | 自左向右 |
11、枚举变量
- 枚举类型可以提高代码的可读性和安全性
- 枚举类型默认是int类型
- 枚举类型成员只能是整数类型
- 枚举类型和其他类型转换需要强制转换
- 默认情况下,枚举类型的下一个项的初始值是上一个项的初始值+1
enum class EquipLevel :int
{normal = 10, armyA = normal,high, armyB = high,rare, armyC = rare,epic, armyD = epic,legend, armyE = legend,myth, armyF = myth
};EquipLevel A{ EquipLevel::normal };
EquipLevel B{ EquipLevel::epic };short diff = (int)B - (int)A;
cout << diff << endl; //3
c++枚举详细介绍以及具体用法
12、自定义变量名称
#define A TypeName
,如#define ZS1 int
typedef TypeName A
,如typedef int ZS2
using A = TypeName
,如using ZS3 = int
13、位运算