C++ 函数参数
C++中函数的参数类型
- 值传递
- 引用形参
- const参数
- 数组参数
值传递
将实参的值复制一份给形参。主要有两种:1)地址参数——实际是对实参操作。2)非地址参数——形参改变不会影响实参
引用形参
实参的引用,实际操作实参,但不会拷贝对象
优点:
- 拷贝某些大的自定义类型的对象时效率低
- 某些类型(IO类型)不支持拷贝
比如在IO流中,重载输出运算符<<,将ostream对象的引用穿进去。
1
friend ostream& operator<<(ostream &os, const My_String &str);
3. 还可以用来返回多个参数,将需要修改的参数通过引用形参传进去
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 int MultiRe(int& n1, int& n2)
{
n1 = n1 + 1;
n2 = n2 + 1;
return n1 + n2;
}
int main()
{
int n1 = 1;
int n2 = 1;
int n3 = MultiRe(n1, n2);
cout << "n1 is : " <<n1<< endl;
cout << "n2 is : " << n2<<endl;
cout << "n3 is : " << n3<<endl;
system("pause");
return 0;
}
输出:
1
2
3n1 is : 2
n2 is : 2
n3 is : 4
n1和n2的值都改变了。
const参数
- 如果两个函数只有顶层const(顶层const是针对对象本身)不同,那么不能将两个函数却分开,编译器会报函数重复定义的错误。底层const(常量引用或常量的指针),不会报错
下面两个show函数中,const int n是顶层const,会出现重复定义错误。
1
2void show(const int n)
void show( int n)
修改成底层const
1
2void show(const int& n)
void show( int& n)
- 可以用非常量初始化底层const(当然顶层const也可以),反之不行
- **尽量使用常量引用 **
这是因为非常量的引用会给人这样的印象——允许你修改变量;如果形参是非常量引用,那么函数不能接受常量实参
对于const参数主要了解这个const属性到底加在哪?并且在操作中不能违背这个const属性。
顶层const修饰对象本身,比如
1 |
|
底层const是const引用或者常量的指针
1 |
|
数组参数
数组的特性:
- 数组不允许拷贝
- 使用数组通常是将它转化成数组的首地址形式
1 |
|
也可以传递数组的首地址和尾地址的下一位,类似于STL操作
1 |
|
也可以传递首地址和数组长度
1 |
|
本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!