C++太复杂了,请注意各种关键词和操作符.最基础是掌握好32个C关键词和操作符,然后是C++元素的额外31个关键词. 其中,asm,volatile,export很少用,export在C++11废弃.
基础篇仅介绍基础概念, 一些小的知识点. 复杂的知识点如指针,对象等由于篇幅问题,另开贴.
C++常识
C++内建类型
10个C关键词: short int long signed unsigned float double char void typedef
5个C++关键词: bool true false wchar_t typeid
int
,float
,double
: 整型,单浮点,双浮点,对应4,4,8字节一般.整型支持8进制065,以0开头;16进制0x2A,0x开头.支持2E-10的科学表达式. float型储存是”符号+.1234+指数部分”形式储存的signed
,unsigned
: 正负数修饰符,默认signed带负数,unsigned不带负数(>=0),所以可表达的范围加倍.short
,long
: 常用整形修饰符,一般对应2,4字节的int(默认long).long也可修饰double.用short/long单独可以忽略后面的int.bool
型用小写true
和false
,分别对应非零值和零char
型字符型,char*
对应字符数组(字符串).单字节,可以用unsigned修饰.数值对应ascii表字符.字符型指明用单引号char var=’A’,也可用ACII码char var=65void
型无类型,一般用于无返回的函数的返回类型,在VS中main函数经常用void返回型,非正规用法.
typedef
自定义新类型名字来代表某种可用的类型,提高可读性
typedef Oldtype Newtype
typedef int NUM10[10]
typedef unsigned long NUM
C++变量和常量
5个C关键词: auto static register extern const volatile
4个C++关键词: dynamic_cast const_cast reinterpret_cast static_cast
变量使用前必须声明, 和python不同. [修饰符]类型 var1,var2….; 也可只用修饰符,例如short var;
变量名:数字字母_,不能非字母开头,区分大小写,避免和关键字冲突, 约定类名用大写开头,变量小写开头.也有类型缩写+大写开头变量名的定义法. 变量声明:类型(变量定义,用于分配内存)和变量名,分号结束.声明的同时可以赋值初始化.可以用逗号,分隔,同时声明. 初始化 int var=5或int var(5) lvalue涉及内存地址的变量,rvalue是非lvalue的表达式的结果.(lr相对于=的位置)
字面常量(直接常量)指一般的数值和字符’a’,字符串. 符号常量 #define PRICE 30 (不是语句,预处理命令,无分号!),预处理阶段处理其值. 常变量: 声明前加const, 声明以外不能再变(不能再作为左值!).(其实属于变量).常变量必须声明同时赋值! 可以用sizeof来操作
存储期,变量的存在时间,分静态存储期和动态存储期,前者如全局变量,static,后者如自动变量,形参,函数调用时的现场保护和返回地址等. 存储区,分程序区,静态存储区和动态存储区,对应的相应存储期的. 作用域,变量的可用范围,是局部的(语句块内,auto,static),文件内全局的(static全局和普通全局),文件间全局的(普通的全局).
变量除了数据类型外,还有存储类别,即存储的方式和空间.C++中为自动(auto),静态(static),寄存器(register),外部(extern). auto变量就是一般的变量,存在动态存储区,一般不加auto这声明 static变量是存在静态存储区的变量 register是存在寄存器处,载入cpu运算比从内存载入快 extern更多是声明,表明变量在别的地方,如在后面声明,别的文件声明.
一般都是自动变量,从定义的语句块(大括号)起到语句块结束终止,语句块内的语句块的变量可以访问外部的变量,反之不行. 避免内部语句块变量名对外部的覆盖(用不同的名字). 所有代码块和类之外的变量都是全局变量,作用域从定义开始到程序结束(静态储存时间,从程序执行时就开始创建直到结束).可用::var来调用被局部覆盖的全局变量. 静态变量用static声明,具有静态储存时间的局部作用域变量. 全局和静态变量都会用0来初始化,自动变量则会使用最近内存的残留.
变量的声明一般包括提示程序分配空间(定义性声明)和提示程序变量存在(引用性声明) 定义主要有auto,static,register和函数外全局变量定义几种.extern只用作声明. 根据存期方法,主要有动态(auto,register),静态(static,全局).
隐式转换:根据表达式的值和变量类型自动进行
显示转换:如使用static_cast
老式强制类型转化: (type)(表达式) 新式可以用type(表达式)来转换 float自动变int时向下取整 char转别的时转为ascii码;反过来则取最低8bit
auto var=expression: 根据表达式返回值自动赋类型(此用法只适用于VC++,非标准.)
static_cast
volatile变量
使用很少的关键词,在类型前声明变量为易变的.意义在于告诉编译器该变量可能被其余程序等进行修改,不要对其进行优化,要从原址取值.C++里面比较高级的用法才用到,非基础性关键词.32个C关键词里最偏的一个.
操作符,表达式,语句
1个C关键词: sizeof 2个C++关键词: namespace using
命名空间
命名空间解决同名冲突的问题. using namespace System; 声明使用System命名空间,若有冲突去掉该话.声明语句. 命名空间::变量/对象 来调用对象的名字. 另外避免使用整个命名空间的一种用法是using std::cout 这样声明的语句. namespace 名称 {语句块}来自定义命名空间, 语句块可以有函数类和变量,常量,类,模板等.函数内不能定义命名空间.命名空间内可嵌套.简单的函数还可以在命名空间中直接定义.{}后无; 对于名字很长和嵌套命名空间,可用缩写namespace TV= Television. namespace{} 无名空间,内部内容只能在本文件使用 ::var 代表全局变量
ps: 相当于python mod.var的表达和from * import * 的表达
C++指针简介
2个C++关键词: new delete
指针定义和操作
动态指针
数据结构
3个C关键词: struc enum union
数组
多维数组
struc结构
enum枚举型
emun声明枚举, 后面用大括号内常量定义了枚举类型Typename, 再定义了变量var为枚举类型的实例 枚举常量的值默认为int从0开始,往上+1.也可显示编号{a=1,b,c},后面没有显示的总是+1.虽然枚举的实例实质是int型,但不能直接用int型1,2来直接赋值 枚举常量可用显示声明变为其余类型emun:char Week{Mon,Tue} thisWeek; 若为bool型会交替true/false 定义好的枚举类型后面可以直接再用Emuntype var2 也可以声明时不指名枚举类型名,但以后就不能再更改. emun {cons1,const2…} var C++甚至可以不写enum,直接用{…}var
emun Typename{
cons1,const2…
} var;
union联合/共用体
共用体是一种类型,多种类型作为一新的整体在内存中占据同一位置. ; 定义联合,将其可用的类型和标记名进行声明,和构造类似.后面var用来声明变量,相当于typeName var;整个思路和stru类区别union使用时只能用其中一种,占据同一内存 var.Aval=N; 给联合的变量赋标记名的值.
联合所占内存大小根据其标记名类型最大来定义. 匿名联合,就是不指名Name,此时系统会自动创建一个实例.标记名可以直接调用 Bval=N. 在main外声明匿名联合要用static. 共用体变量var是类似结构体变量,非普通变量,不能直接赋值或取值,不能作为函数参数,只能对其成员进行操作
union typeName{
typeA A;typeB B;
} var
C++控制与循环
11个C关键词: if else switch case break default for while do continue goto
if语句
if (条件1) {
语句块1;
} else if(条件2){
语句块2;
} else {
语句块3;
}
if (条件3) 单语句;
switch语句
switch(var) {
case value: 语句1; //选择1,多个case
break; //没有则继续运行后面的case,直到break;
default: 语句2; //全都不符时执行default,没有break
}
条件运算符(三元运算符)
c=(a>b)?a:b;
就是bool?true:false的简化if,意思是如果a>b真则c=a,否则c=b
for循环
for (变量起始;循环条件;变量操作){
循环语句块;
[break/continue;]//跳出循环,while循环一样使用
}
for (int i=1; i<100; i++){
cout<<i<<";"<<endl;
}
//三个子句都可以忽略.但要留下分号.
int j=0;
for (;;){
if (j>10) break;
j++;
}
while循环
while (循环条件){
循环语句块;
[break/continue;]
}
//最少运行一次的do..while
do {
循环语句块;
} while(循环条件);//别忘了分号
goto语句
可以控制作为循环或语句跨越跳转.一般建议慎用.
需要标签:
作为标示位点.
myLabel1: 表达式1;
...
//条件1
goto myLabel1;
//条件2
goto myLabel2;
//条件3,直接往下执行
...
myLabel2: 表达式2;
C++函数
1个C关键词: return
4个C++关键词: inline template typename export
函数定义及调用
函数参数
inline内联函数
- 内置函数(内联函数,内嵌函数)是将函数代码直接插入调用处的一种函数,能提高执行速度,不用通过外调度,但会增加程序大小,一般适用于短代码而且频繁使用的函数.
- inline关键词可使用在原型声明或定义中,效果一样.
inline 返回类型 函数名(形参表){
...;
}
template函数模板
- template声明模板,尖括号class或typename后跟可能用到的形参类型. T,U这里是虚拟的类型.
- 在函数实体中,相应的T将被替换为实例时对应的具体类型.
- 函数模板只适用于函数参数个数相同且类型不同,函数体也相同.
- 函数模板只是字面上少点,实际还是在内存创建了不同的函数,大小不会小反而可能更大(因为有限函数定义时可强制转换).
- 强制只生成某种函数形式,可以在函数模板后跟float max(float,int); 来限定创建的形式.
template<class T,U> T max(T x[],…){
T var;
}
typename关键字: 声明模板中临时类型名.也可以用class代替.
C++类
10个C++关键词: class private public protected this friend virtual operator mutable explicit
C++ 异常和调试
3个C++关键词: try catch throw
与其他语言的调用
1个C++关键词: asm
内联汇编
//汇编语句块
__asm{
mov al, 2
mov dx, 0xD007
out al, dx
}
//汇编单句
__asm mov al, 2
C++的63个保留关键字
asm | auto | bool | break | case | catch | char |
class | const | const_cast | continue | default | delete | do |
double | dynamic_cast | else | enum | explicit | export | extern |
false | float | for | friend | goto | if | inline |
int | long | mutable | namespace | new | operator | private |
protected | public | register | reinterpret_cast | return | short | signed |
sizeof | static | static_cast | struct | switch | template | this |
throw | true | try | typedef | typeid | typename | union |
unsigned | using | virtual | void | volatile | wchar_t | while |
C++11 新增关键词
alignas | alignof | char16_t | char32_t | constexpr | decltype |
noexcept | nullptr | static_assert | thread_local |
C的32个保留关键字
char | short | int | unsigned | long | float | double | struct |
union | void | enum | signed | const | volatile | typedef | auto |
register | static | extern | break | case | continue | default | do |
else | for | goto | if | return | switch | while | sizeof |
C99新增关键字
_Bool | _Complex | _Imaginary | inline | restrict |
C11新增关键字
_Alignas | _Alignof | _Atomic | _Generic | _Noreturn | _Static_assert | _Thread_loca |