《C++ Primer 第五版》(第6.1~6.3节) 函数形参和实参传递,可变参数列表和函数返回值

1.函数形参和实参传递问题

          函数参数传递有两种:值传递(变量,指针),引用传递(使用别名)。

          在形参和实参的传递过程中,牵涉到大的类类型对象、容器类型对象或者不支持拷贝操作的对象时,不适合采用值传递,应使用引用传递的方式。另外,实参形参传递的过程中,系统会忽略形参的顶层引用(可用变量赋值给常量形参,可以变量指针赋值给常量指针),因此不能使用顶层const来作为函数重载的判断依据。

          如果函数中没有修改变量的行为,可以将变量前添加const.

          对于数组(性质:不允许数组拷贝,退化为指针)做函数的形参时,会退化为指向首元素的指针,多维数组会退化为数组指针(int matrix[2][3]--->int (*matrix)[3])。退化后,数组长度会被掩盖,可以采用四种方法来得到数组的长度,1)数组有特定的标记结尾,如C风格字符串;2)利用数组的两个库函数begin()和end();3)显示指定大小;4)定义一个指向数组的引用,如 int (&arry)[10}.

2.可变参数列表

          可变参数列表表示在函数调用之前不知道实参的个数。针对这种情况,C++提供了三种解决办法:

                (1)当形参中的参数类型一致,采用initializer_list(同名头文件)的标准库类型,对象中的类型为常量,可用列表初始化初始,头文件中定义了默认/列表初始化,拷贝/赋值运算,size(),begin(),end()等成员函数。initializer_list<int>v1{1,2,3};

                  (2)参数类型不一致,采用可变参数模板

                (3)采用省略符,目的是为了兼容C接口,如C语言中的printf函数。具体格式如下:

                              void foo(para_list,...);              void foo(...);

3.函数返回值

          不要返回局部对象的引用或者指针,因为局部对象在结束调用之后,会发生析构。

          函数的返回类型决定函数是否可以做左值,如果返回的是引用,则可以作为左值

          函数返回值可以是花括号包围的值的列表,用于函数返回值的临时量初始化。如果返回值为内置类型,列表中最多一个值,且sizeof(列表)<=sizeof(返回值类型),如果返回值是类类型,则由类决定。

          运行main()函数无函数返回值,系统会隐式添加,其他函数都需要有返回值(除void).返回值可以函数本身的一个调用(递归),main()函数不允许递归。

         

           

发布了72 篇原创文章 · 获赞 32 · 访问量 3万+

猜你喜欢

转载自blog.csdn.net/xx18030637774/article/details/90448121
今日推荐