1、若形参是引用,那么实参将被绑定到形参上,否则将实参的值拷贝给形参。
2、当形参是引用时,对应的实参被引用传递,或者函数被传引用调用。
3、当实参的值被拷贝给形参时,两个是互相独立的对象,这时候实参被值传递或者函数被传值调用。
4、指针作为形参时,也是执行拷贝操作,拷贝的是指针的值(地址)。拷贝之后两个指针就没有任何关系了。
5、C语言常常使用指针形参去访问函数外部的对象,而C++建议使用引用类型的形参代替指针。
6、使用引用类型可以避免拷贝。当某种类型不支持拷贝操作时,函数只能使用引用形参访问该类的对象。并且当函数无需修改引用参数的值时,应该使用常量引用。
7、使用引用形参可以返回额外信息,由于一个函数只能返回一个值,所以可以使用引用形参。给函数传递一个额外的引用实参,返回时,额外的实参对应的引用形参会隐式的返回,其实是因为引用形参绑定了实参,所以改变了形参的值也改变了实参的值。
8、当实参初始化形参时,会忽略掉形参的顶层const。
9、可以使用一个非常量去初始化一个底层const对象,但是反过来不行,同时一个普通的引用(指针)只能使用同类型的对象初始化。也就是说不能用一个底层const对象去初始化一个非常量,因为底层const去初始化时底层const参与到了类型匹配。但是可以使用顶层const对象去拷贝初始化一个非常量。可以使用常量引用初始化一个普通非常量,例如const int &r=i; int j=r; 注意顶层底层性质只是针对于指针与引用。
10、不能以值传递的方式传递数组,但是可以把形参写成类似数组的形式,数组的大小对函数的调用没有影响。但是使用数组时要确保不越界。
11、管理指针形参,也就是数组实参时,若想要函数知道数组的大小,有三种方式:1)传递给形参的数组本身包含结束标识符,例如C风格字符串。2)传递指向数组首元素的指针和数组尾后元素的指针。3)传递数组的同时传递一个数组大小到形参。
12、C++允许将变量定义为数组的引用,形参也可以是数组的引用。数组的引用就是引用一个固定大小的数组的引用。数组引用作为形参,限制了能够传入的数组的大小。
13、注意数组引用跟数组指针作为形参的区别,前者限定了传入的数组大小,后者则不限制传入的数组大小。
14、main函数的参数有两个:第一个是int类型表示第二个参数的数组元素个数,第二个参数是一个指针数组,类型是char*类型,元素是指向C风格的字符串的指针。
15、当使用argv中的实参时,是从argv[1]开始的,并且最后一个指针之后的元素保证为0,argv[0]保存程序的名字,或者为空。
16、initializer_list是标准库类型,用来表示某种特定类型的值的数组,其定义在同名头文件中。
17、这种类型的对象的元素是对应其初始值的副本,并且其列表中的元素是const类型,给对象赋值或者拷贝时,不会拷贝列表中的元素,拷贝后原始列表和副本共享元素。
18、若想给initializer_list类型的形参传递一个值的序列,那么需要花括号将序列括起来。并且含有initializer_list类型的形参的函数,还可以同时拥有其他类型形参。
19、省略符形参是为了便于C++访问某些特殊的C代码而设置的,这些C代码使用了名为varargs的C标准库功能。该类型形参仅仅使用于C与C++通用的类型。大多数类类型的对象在传递给省略符形参时无法正确的拷贝。
20、省略符形参只能出现在形参列表的最后一个位置。有两种情况:1)部分省略符形参(形参声明后面的逗号是可选的),并且非省略符形参需要与实参进行类型检查,而省略符形参不用。2)只有省略符形参,无需进行与实参的类型匹配。