以#include指令开头,包含来自标准库的头文件,用<>包围头文件名。对于不属于标准库的头文件,用“ ”包围头文件名。
C++字符集
大小写的英文字母:A~Z,a~z
数字字符:0~9
特殊字符:!@#¥%_&*(){}[]<>?|/\';:?,.~
C++标识符的构成规则
①以大写字母、小写字母或下划线_开始
②可以由以大写字母、小写字母、下划线_或数字0~9组成
③大写字母和小写字母代表不同的标识符
④不能是C++关键字或操作符
读取数量不定的输入数据
while(cin>>value){}
while会一直执行至遇到文件结束符(或输入错误)。
后缀
后缀L表示类型至少是long
后缀LL表示类型是long long
后缀U表示unsigned类型
后缀F表示float类型
符号常量
形式: const 数据类型说明符 常量名=常量值;
符合常量在定义时一定要初始化,在程序中间不能改变其值(只能用,不能修改)
基本算术运算符
1、/(若整数相除,结果取整)
2、%(祛瘀,操作数为整数)
3、++,--(自增、自减):
++i; //先将变量i+1,然后变量继续参与其他的运算;
i++; //先将变量生成副本参与其他的运算,然后再将变量+1;
4、逗号运算和逗号表达式
格式:表达式1,表达式2
求解顺序
先求解表达式1,在求解表达式2
最终结果为表达式2的值
例:a=3*5,a*4 //结果为60
5、关系运算与关系表达式
优先次序:<=、>=、>、<(高) ==、!=(低)
关系表达式其结果类型为bool,值只能为true或false
6、条件运算符与条件表达式
形式:表达式1 ? 表达式2 : 表达式3
表达式1必须为bool类型
执行顺序:求解表达式1,表达式1为真,则求表达式2;表达式为假,则求解表达式3;
条件运算符优先级高于赋值运算符,低于逻辑运算符
sizeof运算,位运算
1、sizeof运算符
形式: sizeof(类型名)或sizeof 表达式
结果值:“类型名”所指定的类型或”表达式“的结果类型所占的字节数
2、位运算
按位与:& //用来将某些位置0
按位或:| //用来将某些位置1
按位异或:^ //对应位相同为0,对应位不同为0. 指定将某些位翻转(0与异或保持原值,与1异或取反)
按位取反:~
移位: 左移运算:<< //左移后,低位补0,高位舍弃
右移运算:>> //低位舍弃,高位:无符号补0,有符号补‘符号位’
隐含转换
基本原则:降低类型数据转换为高类型数据
显示转换
形式: 类型说明符(表达式)
(类型说明符)表达式
类型转换操作符<类型说明符>(表达式)
类型转换操作符:static_cast、const_cast、dynamic_cast、reinterpret_cast
例:int(z),(int)z,static_cast<int>(z)
命名的强制类型转换
形式:cast-name<type>(expression)
cast-name:static_cast、dynamic_cast、const_cast、reinterpret_cast
static_cast:显示地执行某种定义明确的类型转换,任何具有明确定义的类型转换,只要不包含底层const,都可以使用;
const_cast:只能改变运算对象的底层const,只有const_cast能改变表达式的常量属性。
reinterpret_cast:把运算对象的内容解释成另外一种类型。
dynamic_cast:支持运行时类型识别。
指针
指针初始化形式: int *p = &ival; //p时指向变量ival的指针
p = &ival; //p赋值ival地址,指向ival
*p = ival; //pi指向ival
空指针
int *p = nullptr;
空指针用nullptr来初始化指针。
void* 指针
可以用于存放任意对象的地址。
指向指针的引用
int *&r = p; //r是一个对指针p的引用
常量表达式
constexpr是指值不会改变并且在编译过程就能得到计算结果的表达式。
类型别名
类型别名是一个名字,某种类型的同义词。
关键字typedef:
typedef 已有类型名 新类型名表;
typedef double wages; //wages是double的同义词
关键字using:
using 新类型名 = 已有类型名;
using SI = Sales_time; //SI是 Sales_time的同义词
auto:编译器通过初始值自动推断变量的类型。auto类型说明符,能让编译器替我们去分析表达式所属的类型。auto定义的变量必须有初始值。
auto item=val1+val2; //item初始化位val1和val2相加的结果。
auto一般会忽略顶层const。
decltype:定义一个变量与某一表达式的类型相同,但并不用该表达式初始化变量
decltype(i) j = 2; //i为int类型,则j为int类型
switch语句:
switch (表达式)
{ case 常量表达式:语句;break;
default:
语句;break;}
每个case分支最后应该加break语句。case分支可包含多个语句,且不用{ }。
枚举类型:
不限定作用域枚举类型:
枚举元素是常量,不能对它们赋值;
枚举元素具有默认值,可以在声明时另行指定枚举元素的值;
整数值不能直接赋给枚举变量,如需要将整数赋值给枚举变量,应进行强制类型转换。枚举值可以赋给整型变量。
定义方式:将全部可取值一一列举出来。
语法形式:enum 枚举类型名 {变量值列表};
enum Weekday {SUN, MON, TUE, WED, THU, FRI, SAT}; //默认SUM=0,MON=1..
基于范围的for循环
语法形式:for(declaration:expression){statement;}
其中:
expression部分表示一个对象,用于表示一个序列。
declaration部分负责定义一个变量,该变量将被用于访问序列中的基础元素。
每次迭代,declaration部分的变量会被初始化为expression部分的下一个元素值。
若迭代器变量的值希望能够在for中被修改,可以采用引用&的方式;
注意:
浮点数在编译器里面赋值时近似相等的,不能比较2个浮点数大小,只能通过作差结果无穷小。
'A'单独的字符A,“A”一个字符的数组,该数组包含:字母A,空字符'\0'
编译器再每个字符串结尾处添加一个空字符'\0'
break语句
使程序从循环体和switch语句内跳出,继续执行逻辑上的下一条语句。不宜用在别处。
continue 语句
结束本次循环,接着判断是否执行下一次循环。
goto 语句
使程序的执行流程跳转到语句标号所指定的语句。不提倡使用。
变量命名规范:
标识符体现实际含义
变量名一般用小写字母
用户自定义的类名一般以大写字母开头
如果标识符有多个单词组成,则单词间应有明显区分。
预处理变量的名字全部大写。