c++primer笔记
加入光荣的进化吧
第六章! 函数
对于让函数返回多个值的具体操作:
- 定义一个新的数据类型,包含多个参数。
- 给函数传入额外的引用实参,令其保存额外的参数,隐式的返回。
const形参和实参
- 当用实参初始化形参时,会忽略掉顶层const。
- 形参有顶层const时,传给他常量对象或者非常量对象都是可以的。
不能用字面值初始化一个非常量引用
int &r4=42; /// wrong!
- 对于不需要修改值的实参。 形参要加上const
- const string &a; 这是一个底层const
string const &a ; 这是一个顶层const;
bool类型
- 只能 return true;
- return false;
- 不能return 1 ;
给main函数传参
- int main(int argc , char *argv[] ){}
- int main(int argc , char **argv ){}
- 第一个形参argc表示数组中字符串的数量,第二个形参是数组。\
- 当使用argv中的实参时,可选的实参从argv[1]开始,,argv[0]保存的是程序的名字,而非用户输入。
“`cpp
int *p1[10]; ///p1是一个含有10个指针的数组
int (*p2)[10]; ///p2是一个指针,指向含有十个整数的数组
“`
由于数组不能被拷贝,所以函数不可以返回数组,但可以返回函数的指针!利用的是类型别名的方法。
- 声明返回函数指针的函数
cpp
int (*func(int val))[10];//括号要对,并且维数必须标明
/************************************************************
type (*function_name(parameter list))[dimension]
逐层的理解:func(int i),名为func的函数有一个int型的参数i
(*func(int i)),表明我们可以对函数返回的结果进行解引用操作
(*func(int i))[10],表明对函数的解引用可以得到大小为10的数组
int (*func(int i))[10],表示数组中的元素是int类型
************************************************************/
- 尾置返回类型
使用decltype ,已知函数的返回值时,可以使用decltype表示返回类型是指针。
- 函数重载
- 当同一个作用域内几个函数名字相同但形参列表不同,称为==重载==函数(overloaded)
- 函数的名字让编译器知道它调用的是哪个几个同名函数, 函数的形参决定具体使用哪个函数。减轻函数取名负担。
- 不允许两个函数除了返回类型外其他要素都相同。
- 因为==顶层const不影响传入函数的对象==,所以一个拥有顶层const的形参和一个没有顶层const的形参并无区别!
summary:==函数的重载必须有形参数量或者形参类型上的不同==
一旦某个形参被赋予了默认值,它【后面】的所有形参都必须有默认值。
- 声明返回函数指针的函数