更快更好的制定C++函数参数

开发 后端
在C++中没规定在C++函数调用时实参的求值顺序,但是编译器需要根据代码从而进行优化需要的参数,下面进行详细说明。

C++函数是C ++语言程序的主要组成部分,一个内部函数可以调用其他函数。在设计良好的程序中,每个函数都有特定的目的,这也证实了C++语言的面向对象的特点。

但是,如果实参表达式中带有副作用的运算符时,就有可能产生由于求值顺序不同而造成了二义性。例如:int z = add_int(++x, x+y);,这样,在不同的编译器就有可能生产不同的结果。

设置参数的默认值

C++语言中,允许在C++函数的说明或定义时给一个或多个参数指定默认值。但是,要求在一个指定了默认值的参数的右边,不能出现没有指定默认值的参数。例如:

  1. add_int(15) 

在上述对函数add_int()的说明中,对该C++函数的最右边的一个参数指定了默认值。在C++函数调用时,编译器按从左至右的顺序将实参与形参结合,当实参的数目不足时,编译器将按同样的顺序用说明中或定义中的默认值来补足所缺少的实参。例如,如有下列的函数调用表达式:

  1. int add_int(int x, int 10); 

在给某个参数指定默认值是,不仅可以是一个数值,而且还可以是任意复杂的表达式。使用数组作C++函数参数,数组作函数参数可以分为如下三种情况:(这三种情况的结果相同,只是所采用的调用机制不同)

1. 形参和实参都用数组

调用函数的实参用数组名,被调用函数的形参用数组,这种调用的机制是形参和实参共用内存中的同一个数组。因此,在被调用C++函数中改变了数组中某个无素的值,对调用函数该数组的该元素值也被改变,因为它们是共用同一个数组。

2. 形参和实参都用对应数组的指针

C++语言中,数组名被规定为是一个指针,该指针便是指向该数组的首元素的指针,国为它的值是该数组首元素的地址值,因此,数组名是一个常量指针。实际中,形参和实参一个用指针,另一个用数组也是可以的。在使用指针时可以用数组名,也可以用另外定义的指向数组的指针。

3. 实参用数组名形参用引用

如何对数组类型使用引用方式,这里先做如下说明:先用类型定义语句定义一个int型的数组类型,然后,使用array来定义数组和引用。

示例:

  1. #include   
  2. typedef int array[8];  
  3. int a[8] = {1, 3, 5, 7, 9, 11, 13};  
  4. void fun(array &b, int n)  
  5. {  
  6. for(int i=0; i b[7]+=b[i];  
  7. }  
  8.  
  9. void main()  
  10. {  
  11. int m=8;  
  12. fun(a, m);  
  13. cout< } 

该程序中,在fun()函数中,使用了引用作形参,调用时所对应的实参应该是一个数组名,这里的引用是给数组起个别名。在fun()函数中对数组b的操作,就相当于b所引用数组a的操作。在C++语言中,常用这种调用方式。

【编辑推荐】

  1. 简介学习C++总结之谈
  2. 对C++库函数进行学习探索总结笔记
  3. C++类库设计的基本构思与方法
  4. C++语言真的还有市场价值?
  5. C++类库设计的基本构思与方法
责任编辑:chenqingxiang 来源: NET130
相关推荐

2010-01-26 09:40:23

C++代码

2010-01-25 14:43:00

C++构造函数

2010-01-15 19:28:59

C++

2010-01-15 16:25:48

学习C++

2017-09-04 17:50:12

2010-01-27 13:38:29

C++ Sum函数

2023-11-17 14:10:08

C++函数

2010-01-13 18:44:03

C++编译

2010-01-28 15:31:34

学习C++语言

2010-01-15 18:06:20

C++引用

2010-01-26 10:01:17

学习C++

2010-02-06 10:54:38

Android进程

2010-01-25 10:10:42

C++函数参数

2010-01-08 17:13:46

Visual C++环

2010-01-22 13:20:27

C++代码

2010-01-15 16:17:04

Carbide C++

2010-01-08 15:45:04

设置Dev C++

2010-01-22 18:06:24

C++代码

2010-01-25 11:13:18

C++栈对象

2010-02-02 13:59:11

Python编写
点赞
收藏

51CTO技术栈公众号