为什么C++的形参有的带&,有的不带,有什么区别
时间: 2024-04-16 16:26:43 浏览: 20
C++的形参有的带`&`,有的不带是因为它们使用了不同的传递方式,具有不同的语义和效果。
1. 形参不带`&`:当形参不带`&`时,表示传递的是值(by value)。这意味着在函数调用时,会创建实参的副本,并将副本传递给函数。在函数内部对形参的修改不会影响到原始实参。
```cpp
void func(int num) {
num = 20; // 修改形参num的值
}
int main() {
int a = 10;
func(a); // 将a的副本传递给函数
cout << a; // 输出 10,a的值未被修改
return 0;
}
```
2. 形参带`&`:当形参带`&`时,表示传递的是引用(by reference)。这意味着在函数调用时,实参的引用直接被传递给函数,而不会创建副本。在函数内部对形参的修改会直接影响到原始实参。
```cpp
void func(int& num) {
num = 20; // 修改引用形参num,也会修改原始实参的值
}
int main() {
int a = 10;
func(a); // 将a的引用传递给函数
cout << a; // 输出 20,a的值被修改
return 0;
}
```
通过使用引用作为形参,可以避免创建副本,减少内存开销,并且可以实现在函数内部对实参的修改。这在某些情况下可以提高程序的效率和简洁性。但需要注意的是,使用引用形参可能会带来意外的副作用,因此需要谨慎使用。