C++中的函数(一)

上下文

C++中函数(二)

函数的形参表

void process(){
   }
void process(void){
   }

没有任何形参的函数可以用空形参列表或含有单个关键字void的形参来表示。

调用函数时,对于每一个实参,其类型都必须与其对应的形参类型相同,或具有可转换为该形参类型的类型。

参数传递

每次调用函数时,都会重新创建该函数所有形参,此时传递的实参将会初始化对应的形参。形参的初始化与变量的初始化一样:如果形参是非引用类型,则复制实参的值,否则它只是实参的别名。

非引用形参

非引用形参表示对应实参的局部副本。对这类形参的修改只会影响局部副本的值。

  • 指针形参也是非引用形参,在函数内部修改指针指向的地址不会影响实参。但是修改指针指向的内容会同步到实参。
  • const形参,限制函数内部不可修改实参的副本。
void fcn(const int i){
   }
void fcn(int i){
   } // error: redefines fcn(int)

值得注意的是,尽管函数的形参是const,但是编译器却将其视为形参被声明为普通的int类型。这种用法是为了支持对C语言的兼容,因为在C语言中,这两种形参的函数没有区别。

复制实参并不是在所有的情况下都适合:

  • 需要在函数中改变实参值得时候;
  • 以大型对象作为实参值得时候。对实际得应用来说,复制对象所付出得时间和存储空间代价往往过大;
  • 当没有办法实现对象得复制时。例如qt中声明了Q_OBJECT的对象就不能进行复制和拷贝。

引用形参

与所有引用一样,引用形参直接关联到其所绑定的对象。每次调用函数,引用形参被创建并与相应的实参关联。从C语言背景转到C++的程序员可能习惯通过传递指针来实现对实参的访问。在C++中使用引用形参更加安全和更自然。

  • 使用引用形参返回额外信息。函数只能返回单个值,但有些时候,不止一个内容需要返回。我们可以定义一种包含这些内容的新类型,也可以传递额外的引用实参,用以返回计算结果。
  • 引用形参不可传递右值或具有需要转换的类型的对象。非const引用形参只能与完全同类型的非const对象关联。
int incr(int &val){
    return ++val; }
int main()
{
   
	short v1 = 0;
	const int v2 = 42;
	int v3 = incr(v1); // error
	v3 = incr(v2); // error
	v3 = incr(v1 + v2); // error
}

普通的非const引用形参既不能用const对象初始化,也不能用字面值或产生右值的表达式实参初始化。应该将不需要需改相应实参的形参定义为const引用,这样就可以传递常量值来调用函数。

string::size_type find_char(const string &s, char c);
find_char("hello world", 'o');
  • 指向指针的引用
void ptrswap(int *&v1, int *&v2)
{
   
	int *tmp = v2;
	v2 = v1;
	v1 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值