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()函数不允许递归。

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

  1. 《C++ Primer 第五版》(第5.1-5.6节) ——异常处理机制(try语句块,throw表达式和catch异常捕捉处理单元)

    1. 异常处理机制 C++中使用try,throw和catch三个关键字来实现异常的触发.抛出和处理的功能,具体通用语法形式如下: try{ if(true) normal program-state ...

  2. 《C++ Primer 第五版》(第3.5-3.6节) ——C++中的内置数组类型,string对象和C风格字符串

    1.C++中的内置数组类型 C++中的数组是内置数据类型,但不是基础数据类型而是构造数据类型,是有限个相同数据.占据着连续物理存储空间的有序集合.而内置数据类型定义的下标运算符可以处理负值运算(只要在 ...

  3. 《C++ Primer 第五版》(第6.3~6.7节)——返回指向数组/函数的指针,函数重载,默认形参、inline函数和constexpr函数

    1.返回指向数组/函数的指针 顾名思义,就是函数返回值为指向数组/函数的指针. 数组的性质:不能被拷贝,函数也不能返回数组.但可以返回数组指针/引用,声明一个返回数组指针的函数,有四种方式,一种是直接 ...

  4. 《C++ Primer 第五版》(第4.11节类型转换) ————关于无符号数和有符号数的运算探究

    1.关于无符号数和有符号数的运算 关于无符号数和有符号数的运算,在我看来一直是觉得只要有无符号数和有符号数的运算,有符号数就转化为无符号数,但是在<C++ Primer 第五版>的p142 ...

  5. C++ Primer 第五版 第7章类 7.1——类讲解(成员函数、非成员函数、构造函数)习题答案

    理论讲解请参考:C++ Primer 第五版 第7章类 7.1--类讲解(成员函数.非成员函数.构造函数) 目录 7.1 定义抽象数据类型习题答案 7.4&7.5 7.6&7.7 7. ...

  6. C++ Primer 第五版 第7章类 7.1——类讲解(成员函数、非成员函数、构造函数)

    习题答案请参考:C++ Primer 第五版 第7章类 7.1--类讲解(成员函数.非成员函数.构造函数)习题答案 目录 7.1 类讲解(成员函数.非成员函数.构造函数) 成员函数 this cons ...

  7. C++ Primer 第五版 第6章——函数阅读笔记及习题答案(完整,附C++代码)

    C++Primer(第五版)第6章函数的阅读笔记及课后习题答案总结,课后习题答案是自己学习写出来的,如果有误,欢迎指正 还不完整,后续会更新添加 阅读笔记 C++ Primer 第五版 第6章 6.1 ...

  8. C++ Primer 第五版 第6章 6.7——函数指针习题答案

    理论请参考:C++ Primer 第五版 第6章 6.7--函数指针阅读笔记 目录 6.7 函数指针习题答案 6.54 6.55 6.56 6.7 函数指针习题答案 6.54 vector是指向该函数 ...

  9. C++ Primer 第五版 第6章 6.7——函数指针阅读笔记

    习题答案请参考:C++ Primer 第五版 第6章 6.7--函数指针习题答案 目录 6.7 函数指针 使用函数指针 返回指向函数的指针 6.7 函数指针 声明一个函数指针,只需要用指针替代函数名即 ...

最新文章

  1. web.config配置文件详解
  2. linux增加电子档案空间,Linux 建立 SWAP 档案空间
  3. Gateway网关-过滤器链执行顺序
  4. 解决: -bash: docker-compose: command not found、linux 安装 docker-compose
  5. Zabbix3.2安装
  6. bat循环执行带参数_wxappUnpacker的bingo.bat脚本逐行解读
  7. Spring是如何解决循环依赖的
  8. python正则表达式代码_python正则表达式的使用(实验代码)
  9. 技术开发者应该如何构建小团队的微服务方案?
  10. Spring中bean属性注入方式总结:构造方法、setter注入、p命令空间注入、SpEL注入、集合注入
  11. matlab 可变参数与默认参数设置
  12. js限制input输入
  13. jQuery日历控件(JS日期拾取器)实用精简
  14. uploadify组件文件上传那些事
  15. solidworks2014可否保存成以前版本?--问题解决
  16. KeyDown,KeyPress和KeyUp详解
  17. 1094:与7无关的数
  18. Android 高德地图入门指南
  19. Hadoop配置datanode
  20. 从奥本海默的浮沉谈科学与政治的关系

热门文章

  1. 课时66.颜色控制属性下(理解)
  2. 转载大神的一篇文章----【如何选择开源许可证?】
  3. 【存储过程】MySQL存储过程/存储过程与自定义函数的区别
  4. jquery GET POST
  5. 6月24 面向对象的设计原则-----工厂模式和单列模式
  6. python中的 descriptor
  7. Linux内核3.0移植并基于Initramfs根文件系统启动
  8. QT mainwindow四件套
  9. JAVA UDP网络编程学习笔记
  10. 关于autoupgader的狗屎问题