C++:一般情况下,设计函数的形参只需要两种形式

C++:一般情况下,设计函数的形参只需要两种形式。一,是引用形参,例如 void function (int &p_para);二,是常量引用形参,例如 void function(const int &p_para)。

它们的特点如下:

# 引用形参适用于需要改变变量数据的情况,常量引用形参适用于不需要改变对象、变量数据的情况。

# 引用形参需要对象、变量来传递值,常量引用形参则不需要,可以直接传递表达式或者函数返回值。

通过这两种方式可以涵盖所有可能需要的设计情况,而通过这种方式实现的函数设计,*可以避免通过值传递的形式造成的额外复制值的操作。*

即使是出现了突破这两种方式涵盖的需求的情况(我暂时没有想到),也只需要手动创建一个相同的变量再复制值然后传递来满足。

扩展:未来编程语言的设计选择

我希望在未来的编程语言中的函数设计的默认形式应该是类似 function(type pName),它的本质应该是常量引用传递,这样就可以接受类似表达式、函数返回值的情况;还有一种形式应该是类似 function(tag type pName),它的本质应该是引用传递,要求调用者传递对象或变量来实现可改变的值的获取。这么做就是*为了避免通过值传递的形式造成的额外复制值的操作。*

类似的情况在 C# 中可以看见,它的 tag 有 ref 和 out,后者相对前者约定不需要初始化值也不会获取该参数的值。但我认为这种分类没有很大的必要,是因为基于变量本身的设计,没有必要再通过其他的操作去限定获取地址的引用是否不能读取它的值。而是否应该读取参数的值,应该由函数名和参数名甚至是注解来表明意图,否则单纯依靠 ref 这样的标志仍然无法使调用者明白应该传入什么值,这样就可以避免编程语言通过额外的操作来限定、分类。

时间: 2024-12-20 22:23:07

C++:一般情况下,设计函数的形参只需要两种形式的相关文章

Centos7.3 下SQL Server 备份及还原的两种方式

Centos7.3 下SQL Server 备份及还原的两种方式 我们前面两篇文章介绍了Centos7.3下SQL Server的安装配置及使用Powershell的管理介绍,今天我们接着介绍如何实现Centos7.3 下SQL Server  备份及还原,有两种方式:1.使用SSMS备份及还原,该方式最为简单也最方便操作的方式,2.使用Linux下SQL Server自带功能命令备份,具体见下: 我们上一篇中创建了一个测试数据库,我们接着拿这个数据库进行测试,我们首先使用第一种方式,使用SSM

一般情况下设计应遵循的原则

在大多数情况下,接口都是比继承更优的选择.尤其是对于Java这类单继承语言. 多用组合(has a),少用继承(is a).用实例域代表一个接口,然后将行为封装进接口族中,再组合进代码中,这样的代码既灵活也可以复用. 找出程序中不会变的和会变的,然后相分离. 接口对于解耦合也很有用处. 对于类之间的数据传递,最好也是封装起来,以保证后期的良好扩展. 同接口也可以进行适当的分离以解耦合,比如将获取数据(GetData)和显示数据(Display)分属于两个接口让类去实现,而不是揉和在一起. fla

D3D11 IASetVertexBuffers 函数与顶点数据的两种组织方式

D3D11中的 IASetVertexBuffers 函数用来向GPU传递顶点数据.一般情况下,我都是传入一个buff,也即在0号slot上绑定了一个buff,其他slot都没有绑定buff.我传入的这个buff,是一个存储了顶点结构体数据的数组,每个顶点结构体中都有Position成员,Color成员,UV成员等等.用术语来描述我这种做法,就是“交错的顶点数据”,英文称呼有这些 Interleaved Vertex Data , an array of structs . 相对应的,另外一种做

Linux系统下安装jdk及环境配置(两种方法)

在windows系统安装jdk以及环境配置,相信大家都会,这里就不做赘述了,本人菜鸟一枚,今天复习了在linux下安装jdk后,特此做了个总结,这里主要分享下linux下的jdk安装以及环境配置. 下面是linux下安装jdk的两种方式: 第一种属于傻瓜式安装,一键安装即可(yum安装): 第二种手动安装,需要自己去Oracle官网下载需要的jdk版本, https://www.oracle.com/java/technologies/javase-jsp-downloads.html 然后解压

用SQL Server的CAST()函数获得GB2312和UTF8两种编码

CAST()函数的参数类型变化,为中文返回两种不同的编码: SELECT CAST('汉字' AS VARBINARY) AS [GB2312]; --相当于 CAST(CAST(N'汉字' AS   VARCHAR(4)) AS VARBINARY) SELECT CAST(N'汉字' AS VARBINARY) AS [UTF-8]; --相当于 CAST(CAST(N'汉字' AS NVARCHAR(2)) AS VARBINARY) 返回结果(二进制类型): GB23120xBABAD7

函数基础之定义,三种形式,返回值

函数基础 函数的定义 函数是一种思想. 在程序中,函数就是具备某一功能的功能,事先讲工具准备好就是函数的定义,遇到场景拿来就用就是函数的调用. 为何用函数 我们如果过不使用函数的话,写程序时将会遇到三个问题: 1.程序冗长 2.程序的扩展性差 3.程序的可读性差 如何使用函数 定义函数 先定义函数,后调用: 定义函数 def 函数名(param1,param2....): """ 函数功能的描述信息 :param1 描述 :param2 描述 :return 返回值 code

请写出并说明如何在命令行下运行PHP脚本(写出两种方式)同时向PHP脚本传递参数

方法一: <?php if ($argc > 1){ print_r($argv); } ?> php.exe test.php welcome Ricky Feng 方法二: 还有一种这样的,提示用户输入,然后获取输入的参数.有点像C语言 <?php fwrite(STDOUT, "Enter your name: "); $name = trim(fgets(STDIN)); fwrite(STDOUT, "Hello, $name!")

如何在命令行下运行PHP脚本(写出两种方式)同时向PHP脚本传递参数?

腾讯 window下,假设php安装目录为c:\program files\php5\,那么使用命令窗口进入到该路径下,敲入php hello.php回车,则会执行当前路径下的hello.php文件, 如果要指向其他路径下php文件,可以在php 路径/hello.php ,这种形式称为CLI模式,我们平时通过浏览器看到的那种成为CGI模式,至于传递参数,php文件在cli模式下,直接通过在文件名称后面接参数,多个参数中间用空格隔开,在php文件里面是通过两个变量来获取参数的,一个是$argv,

Windows7下默认网关不能保存ip的两种解决方法

Windows7下默认网关不能保存ip解决方法 第一种: 第一步:点击左下角的WIN图标或WIN图标+R也可,输入CMD然后回车,打开DOS模式窗口.第二步:在DOS命令行提示符下直接输入:“netsh winsock reset”,输入的是引号内的,不包含引号,然后回车,提示需要重启,暂时不重启.第三步:在DOS命令行提示符下直接输入:“netsh int ip reset reset.log”,然后回车,提示重新启动计算机完成此操作.第四步:关闭DOS窗口,重新启动计算机,问题解决. 第二种