c++ 参数传递之 非引用形参

1 非引用实参

每次调用函数时,都会重新创建该函数所有的形参,此时所传递的实参将会初始化对应的形参。

形参的初始化与变量的初始化一样:如果形参具有非引用类型,则复制实参的值,如果形参为引用类型(第 2.5 节),则它只是实参的别名。

指针形参————————————————可以修改实参指针指向的值,但是不能修改实参指针

函数的形参可以是指针(第 4.2 节),此时将复制实参指针,

如果函数形参是非 const 类型的指针,则函数可通过指针实现赋值,修改指针所指向对象的值:

void reset(int *ip) 
{
*ip = 0; // changes the value of the object to which ip points
  ip = 0; // changes only the local value of ip; the argument is unchanged
}

调用 reset 后,实参依然保持原来的值,但它所指向的对象的值将变为 0:

如果不想让实参指向的值发生改变。。加个const

void reset(const  int *ip) 


}

const  形参 

如果函数使用的 形参既不是引用形参也不是const 形参,那么可以给改参数传递 const 实参,当然 非const 实参也能传递

 

这种行为源于 const 对象的标准初始化规则(第 2.4 节)。因为初始化复
制了初始化式的值,所以可用 const 对象初始化非 const 对象,

如果函数形参是const 形参 的话,而且不是引用类型的const 形参,

void fcn(const int i) { /* fcn can read but not write to i */ } 

由于实参仍然是以副本的形式传
递,因此传递给 fcn 的既可以是 const 对象也可以是非 const 对象。

 

 

 

 

posted on 2012-10-30 17:20  GIS-MAN  阅读(370)  评论(0编辑  收藏  举报

导航