默认值参数
在函数声明或定义的时候,给定参数默认值,如果参数传递的时候不给该形参传值,则会按照默认值传参。
函数参数的默认值是在编译期生成指令的时候,直接生成入参指令,函数参数的默认值只能传递常量。
函数的默认值参数只能从右向左赋值,不能跳过。
函数的默认值参数在同一作用域中只能赋值一次,不能重复赋值。
因为函数参数的默认值是在编译期时期带入的,所以函数参数的默认值只在本文件中生效。
内联函数
在release版本中调用内联函数,该函数会在调用点展开(编译时期展开)。
在debug版本中调用内联函数和正常函数的调用方法一致。
由于内联函数在编译期展开,而编译期无法获取变量的值,递归函数的终止条件一定需要变量的值参与,所以递归函数不可能被处理为内联函数。
inline函数只是对系统的建议,建议系统将其视为内联函数。
inline函数在debug版本中生成的是局部符号(local),如果被处理为内联函数后在release版本不生成符号,直接在调用点展开。
符号
所有的数据都会生成符号
指令中只有函数名会处理为符号
全局符号(global)所有的文件只要引用声明就可以使用。
局部符号(local)只有本文件可见。
指针和数组名的区别
数组 数组名 常量 39323987
指针 变量
常量
在编译时期将常量的值直接写入到常量的使用点
常量的初始化必须使用常量,使用变量就会退化为常变量
const和指针
const修饰的值不能成为左值,不能泄露常量的地址给非常量的指针
const修饰的类型是离它最近的第一个成型的类型,其余是它修饰的内容
如果const修饰的内容不包括指针,则无法参与类型
引用
引用的底层是一个指针
在使用到引用的地方,编译期会自动替换成为底层指针的解引用