Hom's Blog


C++基础篇

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型用小写truefalse,分别对应非零值和零
  • char型字符型,char* 对应字符数组(字符串).单字节,可以用unsigned修饰.数值对应ascii表字符.字符型指明用单引号char var=’A’,也可用ACII码char var=65
  • void型无类型,一般用于无返回的函数的返回类型,在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)(表达式) 新式可以用type(表达式)来转换 float自动变int时向下取整 char转别的时转为ascii码;反过来则取最低8bit

auto var=expression: 根据表达式返回值自动赋类型(此用法只适用于VC++,非标准.)

static_cast(表达式)静态检查类型强制转换(编译时检查) dynamic_cast(表达式)动态检查类型强制转换(执行时检查) const_cast(表达式)可以删除常量const属性,也可以用于添加常量属性. reinterpret_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

Reference

  1. C++wiki
  2. C wiki
  3. 百度-C++关键字


◆ 本文地址: http://platinhom.github.io/2015/07/08/Cpp-basic/, 转载请注明 ◆

前一篇: 将Github Page迁移到GitCafe Page
后一篇: Project Page in Github Page


Contact: Hom / 已阅读()
Source 类别: Coding  标签: C++  Key