C++ primer(5th)第五-六章

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*

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值