5.1简单语句
; //空语句,语法上需要一个语句但逻辑上不需要
复合语句(块):用花括号括起来的语句
5.4.3范围for语句
vectorv={0,1,2,3,4,5};
for(auto &r:v) //对于v中的每一个元素
6.1.2函数声明(函数原型)
函数只能定义一次,可声明很多次
函数的三要素(返回类型、函数名、形参类型)
函数在头文件中声明,源文件中定义
若需要修改实参,则形参设置为引用类型
6.2.3const形参和实参
顶层const作用于对象本身
6.2.4数组形参
数组特殊性质:1.不允许拷贝数组 2.使用数组时会将其转换成指针
//下面三个函数等价,每个函数都有一个const int *的形参
void print(const int *);
void print(const int[]);
void print(const int[10]);
int i=0,j[2]={0,1};
print(&i); //&i的类型是int*
print(j); //j转化成int*并指向j[0]
int (&arr)[10]; //arr是具有10个整数的整型数组的引用
void print(int (*martix)[10],int r){}; //martix声明成指向含有10个整数的数组的指针
int *martix[10]; //10个指针构成的数组
void print (int martix[][10] ); // 形参是指向含有10个整数的数组的指针
void f(int &a[10]);//引用的数组
void f(int (&a)[10]);//数组的引用
void f(int *a[10]);//10个指针构成的数组
void f(int (*a)[10]);//一个指针,指向十个整数元素
6.2.5main:处理命令行选项
int main (int argc,char *argv[]) //argv是一个数组,他的元素是指向c风格字符串的指针;
//argc表示数组中字符串的数量
当实参传给main函数后,argv的第一个元素指向程序的名字或者一个空字符串,接下来的元素依次传递命令行提供的实参
6.2.6含有可变形参的函数
如果函数的实参数量未知但是全部实参的类型相同可以用initializer_list形参
initializer_list对象中的元素永远是常量值,不可改变initializer_list对象中元素的值
6.2.7省略符形参
两种形式:
void foo(parm,…);
void foo(…); //省略符形参所对应的实参无需类型检查
递归:函数调用它本身
6.3.3返回数组指针
typedef int arrT[10]; //arrT是一个类型别名,他表示的类型是含有10个整数的数组
using arrT==int[10]; //arrT的等价声明
arrT*func(int i); //func返回一个指向含有10个整数的数组的指针
使用尾置返回类型
//func接受一个int的实参,返回一个指针,该指针指向一个含有十个整数的数组
auto func(int i)->int(*)[10];
6.4函数重载
同一作用域内几个函数的名字相同但形参列表不同,调用时编译器会根据传递的实参类型推断想要的是哪个函数
不允许两个函数除了返回类型外其他所有要素都相同
函数的重载必须有形参数量或者形参类型上的不同
重载和const形参
Record lookup(phone);
Record lookup(const phone);//二者等价
6.5特殊用途语言特性
6.5.1默认实参
typedef string::size_type sz;
string screen(sz ht=24,sz wid=80,char backgrnd=’ ');
string window;
window=screen(); //等价于screen(24,80,’ ‘)
window=screen(66); //等价于screen(66,80,’ ‘)
window=screen(66,234); //等价于screen(66,234,’ ‘)
6.5.2内联函数和constexpr
inline const string& shorterstring(const string &s1,const string &s2){}; //内联函数,可避免函数调用的开销
constexpr函数:能用于常量表达式的函数,函数返回类型和形参类型都是字面值类型,函数体有且只有一条return语句
6.6函数匹配
6.7函数指针
函数指针指向的是函数而非对象。
bool (*pf)(const string &,const string &); //pf是一个指向函数的指针,该函数的参数是两个const string引用,返回值是bool类型
pf=lengthconpare; // pf指向一个名为lengthconpare的函数
pf=& lengthconpare; //等价于上一行
bool b1=pf(“hello”,“good”); //调用lengthconpare函数
bool b2=(*pf)(“hello”,“good”); //等价于上一行
bool b3=lengthconpare(“hello”,“good”); //等价于上一行
bool * pf(const string &,const string &);//pf是一个函数,返回bool*