在头文件中进行函数声明

建议变量和函数应该在头文件中声明,在源文件中定义。

使用引用避免拷贝

如果函数无须改变引用形参的值,最好将其声明为常量引用。

// 比较两个string对象的长度
bool isShorter(const string &s1,const string &s2)
{return s1.size()<s2.size();
}
尽量使用常量引用
bool is_empty(const string& s)      { return s.empty(); }
表示数组大小的形参
void print(const int ia[],size_t size)          // 等价于const int* ia
{for(size_t i=0; i!=size; ++i)cout << ia[i] <<endl;
}
数组引用形参
// 正确:形参是数组的引用,维度是类型的一部分
void print(int (&arr)[10])
{for(auto elem:arr)cout << elem << endl;
}f(int &arr[10]);                // 将arr声明成了引用的数组
f(int (&arr)[10]);              // arr是具有10个整数的整型数组的引用int *matrix[10];                // 10个指针构成的数组
int (*matrix)[10];              // 指向含有10个整数的数组的指针
initializer_list

如果函数的实参数量未知但是全部实参的类型都相同,可以使用initializer_list类型的形参。

和vector一样,initializer_list也是一种模板类型,定义initializer_list对象时,必须说明列表中所含元素的类型。

initializer_list<string> ls;
initializer_list<int> it;

和vector不一样的是,initializer_list对象中的元素永远是常量值,无法改变initializer_list对象中元素的值。

如果想向initializer_list形参中传递一个值的序列,则必须把序列放在一对花括号内。

void error_msg(ErrCode e,initializer_list<string> il)
{cout << e.msg() << ":";for(const auto &elem:il)cout << elem << " ";cout << endl;
}// expected和actual是string对象
if(expected != actual)error_msg(ErrCode(42),{"functionX",expected,actual});
elseerror_msg(ErrCode(0),{"functionX","okay"});
省略符形参

省略符形参是为了便于C++程序访问某些特殊的C代码而设置的,这些代码使用了名为varargs的C标准库功能。省略符形参应该仅仅用于C和C++通用的类型。特别应该注意的是,大多数类类型的对象在传递给省略符形参时都无法正确拷贝。

省略符形参只能出现在形参列表的最后一个位置。

void foo(parm_list,...);
void foo(...);

【C++笔记】函数(笔记)相关推荐

  1. 20171220-python学习笔记--函数类型

    20171220-python学习笔记--函数类型 备注: #位置参数 #传入两个参数 def power(x, n):s = 1while n > 0:n = n - 1s = s * xre ...

  2. Java Lambda 表达式(又名闭包 (Closure)/ 匿名函数 ) 笔记

    Java Lambda 表达式(又名闭包 (Closure)/ 匿名函数 ) 笔记 根据 JSR 335, Java 终于在 Java 8 中引入了 Lambda 表达式.也称之为闭包或者匿名函数. ...

  3. Python3 函数笔记

    Python3 函数笔记 默认值在函数定义作用域被解析,如下所示: >>> i =5 >>> def f(arg=i): ...     print(arg) .. ...

  4. 电商第一季函数笔记(1)

    1.isset (PHP 4, PHP 5, PHP 7) isset - 检测变量是否设置 说明 bool isset ( mixed $var [, mixed $... ] ) 检测变量是否设置 ...

  5. oracle concat函数用法_大白的函数笔记:文本合并就是这么简单,不会的快来学...

    我们在工作中,经常会遇到需要把几个单元格的内容连接起来的情况,针对这种情况Excel为我们提供了几种方法:CONCATENATE函数.CONCAT函数"&"连接符和PHON ...

  6. 9_python笔记-函数

    9_python笔记-函数 练习1 写法1:flag标志位 写法2 写法3 写法4 知识点2 git bash 发出冲突 知识点3 列表的拷贝 b = a[:] 示例:列表的拷贝 知识点4 flag ...

  7. mbedTLS(PolarSSL)简单思路和函数笔记(Client端)

    转自: OpenSSL一直以来各种被诟病,具体挑了哪些刺,本文就不深究.作为OpenSSL有很多替代,我了解到的有cyaSSL(WolfSSL)和PolorSSL.其中PolarSSL已经被ARM收购 ...

  8. SQL及Excel函数笔记2022

    @[TOC](SQL及Excel函数笔记2022) Excel函数 使用场景:OA单据没有对应类型编码code 需要在表格中快速匹配出想要的输出可以使用一下IF函数 Excel if 公式使用 =IF ...

  9. JavaScript学习笔记——函数 Part4:向函数传递函数、从函数返回函数(函数是一等公民)

    要点 函数是值,这个值就是函数引用 函数是一等公民:函数引用是一等值 可将函数引用赋给变量.含在数据结构(如对象)中.传递给其他函数或从其他函数返回 函数是一等公民 不要再认为函数是特殊的,有别于Ja ...

  10. 傲游浏览器怎么创建笔记 傲游浏览器笔记创建方法分享

    和某些浏览器不同,傲游浏览器中的笔记功能拥有极清爽.极简约.极免费等三大特性,并因此获得了不少用户的青睐.那么,在傲游浏览器中该怎么创建笔记呢?下面小编就来分享一下傲游浏览器笔记创建的方法,有需要的朋 ...

最新文章

  1. 商汤被曝已获准在香港上市,计划筹资逾10亿美元
  2. 在spring中,prototype scoped bean 如何注入单例bean中
  3. HDU3371(最小生成树)
  4. RHEL5.6配置本地yum源
  5. 基于ArcSDE的影像数据管理-疑惑篇 (转载)
  6. 高级学员:2015年10月24日作业
  7. LeetCode 1392. 最长快乐前缀(KMP)
  8. Perfect:Swift 语言服务器端软件框架简介
  9. JS 将图片编码BASE64
  10. Xcode :error: linker command failed with exit code 1(use -v to see invocation) 或 libstdc++.6.0缺失问题
  11. matlab画图实例_自定义函数
  12. 计算机安全中心无法启动,电脑无法启动windows安全中心服务怎么办?
  13. 计算机上机考试自我检查800字,学生检讨书800字反省自己【三篇】
  14. 访问FTP站点下载文件,提示“当前的安全设置不允许从该位置下载文件”
  15. Acwing-45. 之字形打印二叉树
  16. JAVA默认永久代大小_jvm——metaspace代替永久代
  17. 用FPGA实现深度卷积神经网络(5)
  18. CTF CRYPTO 从零开始的RSA1
  19. ajax获取涨停股票接口,80后股神研究的两个涨停买入法!(图解)
  20. 台式计算机BIOS怎么查,怎么查看bios版本|查询电脑主板bios版本的方法

热门文章

  1. 【汇编】汇编程序入门篇
  2. J2EE代码存档--导出Excel
  3. oracle中对排序的总结(按照拼音、部首、笔画排序功能 )
  4. SharePoint 已在此服务器场中安装 ID 为 XXXXXXXXX 的功能。请使用强制属性显式地重新安装此功能。解决方法...
  5. 生成对抗网络与图像分割
  6. centos7安装浏览器
  7. 关于反射中.getDeclaredContructor()返回构造方法顺序的问题(转)
  8. pycharm里生成requirements.txt
  9. 移动端报表JS开发演示样例
  10. 漂亮的代码6:增加字符串后的数字