C++:参数
一、基础
- 实参是形参的初始值,对每个形参都需要穿一个能转换为它的实参
- 形参列表中的形参通常用逗号隔开,其中每个形参都含有一个声明符的声明
二、main(int argc, char *argv[])
有时我们需要给main穿递实参,常见的情况是用户通过设置一组选项确定函数所要执行的操作
argc---->代表argv中的元素个数,argv---->代表元素为char *的指针数组
cmd下:
通过执行main函数所在的可执行文件prog.exe
prog -d -o ofile data0
向main内传参
argv[0] 通常是函数名或者一个空字符串,可选的实参从argv开始
三、传引用参数与const情况(省略一部分简单情况)
引用参数 目的:使用引用避免拷贝,加快效率
关于重载函数的一部分:void fcn(const int i) 与 void fcn(int i)是一样的,因为形参的初始化和变量的初始
化方式是一样的,const int i在初始化是忽略顶层const
把不会改变的形参定义为常量引用,对要改变的定义为普通引用
eg:
bool is_sentence1(const string &s){...}
bool is_sentence2(string &s){...}
常量引用形参的实参可以是对象或者常量,但不可以"改变形参"
普通引用可以"改变形参",但实参只能是对象
四、数组形参和const
通常的形参情形:
一维的
void print(const int *)
void print(const int[]);
void print(const int[10]);
二维的
void print(int (*matrix)[10]);
数组引用形参形式:void print(int (&arr)[10])--->像这样的形参只能将函数作用于大小为10的数组
分析:
因为形参的初始化和变量的初始化方式是一样的--->书上说的
但我们并不能
void func(int a[]){...}
or
void func(int *a){...} -->比如字符串就可以如此
int main(){
func({0,1,2,3});
return 0;
}
如何能func({0, 1, 2, 3}) 成功?(根据报错可知传递{0, 1, 2, 3}是"brace-enclosed initializer list"类型)
1.通过c11的initializer_list标准库类型()
2.通过void func(const int (&a)[4])的形参设置-->const使得可以接收常量实参,int (&a)[4]的想法和之前
对for范围循环的特性二有关,int (&a)[4]才能完整传递数组且得知道数组大小--->个人看法
五、含有可变参数的形参
- initializer_list--->同vector一样是模板类型,但元素永远是常量
void error_msg(initializer_list il){....}
error_msg({'lalalal', 'your error'}) - 省略符类型
void foo(parm_list, ...);
or
void foo(...);
只能这样两者形式,详情见C++省略符
C++:参数的更多相关文章
- 【.net 深呼吸】细说CodeDom(6):方法参数
本文老周就给大伙伴们介绍一下方法参数代码的生成. 在开始之前,先补充一下上一篇烂文的内容.在上一篇文章中,老周检讨了 MemberAttributes 枚举的用法,老周此前误以为该枚举不能进行按位操作 ...
- Angular2入门系列教程6-路由(二)-使用多层级路由并在在路由中传递复杂参数
上一篇:Angular2入门系列教程5-路由(一)-使用简单的路由并在在路由中传递参数 之前介绍了简单的路由以及传参,这篇文章我们将要学习复杂一些的路由以及传递其他附加参数.一个好的路由系统可以使我们 ...
- Angular2入门系列教程5-路由(一)-使用简单的路由并在在路由中传递参数
上一篇:Angular2入门系列教程-服务 上一篇文章我们将Angular2的数据服务分离出来,学习了Angular2的依赖注入,这篇文章我们将要学习Angualr2的路由 为了编写样式方便,我们这篇 ...
- Scrapy框架爬虫初探——中关村在线手机参数数据爬取
关于Scrapy如何安装部署的文章已经相当多了,但是网上实战的例子还不是很多,近来正好在学习该爬虫框架,就简单写了个Spider Demo来实践.作为硬件数码控,我选择了经常光顾的中关村在线的手机页面 ...
- 【每日一linux命令4】常用参数:
下面所列的是常见的参数(选项)义: --help,-h 显示帮助信息 --version,-V ...
- 【每日一linux命令3】参数(或称选项)顺序
一般除了特殊情况,参数是没有顺序的.举例而言,输入"–a –v"与输入"–v –a"以及"–av" 的执行效果是相同的.但若该参数后指定了要 ...
- C# 中参数验证方式的演变
一般在写方法的时候,第一步就是进行参数验证,这也体现了编码者的细心和缜密,但是在很多时候这个过程很枯燥和乏味,比如在拿到一个API设计文档的时候,通常会规定类型参数是否允许为空,如果是字符可能有长度限 ...
- js中参数不对应问题
因为js是一种弱类型的编程语言,对数据类型的要求没有其他编程语言的要求严格,所以在定义函数的时候不需要像java和C#一样对其传入参数的类型进行定义.那么传入参数的个数有没有影响呢?今天小猪就做了个实 ...
- C++中的变长参数
新参与的项目中,为了使用共享内存和自定义内存池,我们自己定义了MemNew函数,且在函数内部对于非pod类型自动执行构造函数.在需要的地方调用自定义的MemNew函数.这样就带来一个问题,使用stl的 ...
- nodejs进阶(5)—接收请求参数
1. get请求参数接收 我们简单举一个需要接收参数的例子 如果有个查找功能,查找关键词需要从url里接收,http://localhost:8000/search?keyword=地球.通过前面的进 ...
随机推荐
- C语言作用域、链接属性和存储类型
C/C++中作用域详解 作用域 编译器可以确认的4种作用域-代码块作用域.文件作用域.函数作用域和原型作用域,一般来说,标识符(包括变量名和函数名)声明的位置决定它的作用域. (1)代码块作用域 一对 ...
- Ionic 列表、文本 自动 换行
1.采用row 布局的row-warp 来处理 <div class="item item-icon-right"> <span>图片相册</span ...
- 第一章 使用开发者模式快速入门 Odoo 12
本文为最好用的免费ERP系统Odoo 12开发手册系列文章第一篇. Odoo提供了一个快速应用开发框架,非常适合创建商业应用.这类应用通常用于保留业务记录,增删改查操作.Odoo 不仅简化了这类应用的 ...
- 移动端iPhone系列适配问题
问题一:苹果手机上的input按钮自带渐变效果 一样的代码,为啥在苹果手机上的input按钮就自带渐变效果,搞特殊吗?怎么让它显示正常?只需要加上outline:0px; -webkit-appear ...
- 2.快速创建springboot项目 连pom文件里面的配置都不用配了
无论是创建项目 还是module 模块 选择这个 .然后在后面的选择中选择自己要的功能 就可以把相关的依赖都加进去 省去了依赖 其后的写法跟第一篇一样 在这个项目下面有一个配置文件 ====>a ...
- TCP/TP:DNS区域(Zone)
之前阅读资料不是特别明白,看到一个博主的解释,豁然开朗,特此记录. https://blog.csdn.net/huangzx3/article/details/79347556 DNS区域(ZONE ...
- matplotlib无法显示中文
import matplotlib as mpl mpl.rcParams['font.sans-serif'] = ['KaiTi']mpl.rcParams['font.serif'] = ['K ...
- JAVA数据库连接池的革命 -- 从BoneCP到HikariCP(转)
从BoneCP到HikariCP 今天笔者本想更新一下项目中使用到的BoneCP版本的.却无意发现jolbox网站打不开了.起初以为是被墙掉了,经过一番查找,居然在BoneCP的Github站看到了如 ...
- 使用session实现一次性验证码
在登录页面和各种页面,会看到有验证码输入,这样做的目的是为了防止密码猜测工具破解密码,保护了用户密码安全,验证码只能使用一次,这样就给密码猜测工具带来了很大的困难,基本上阻断了密码猜测工具的使用. 可 ...
- Docker 私有仓库下载镜像
1.添加私有仓库路径 vim /etc/sysconfig/docker --insecure-registry 192.168.105.30:5000 注:版本差异 2.下载镜像 docker pu ...