C++中值调用和引用调用不同点
时间: 2024-10-11 13:08:38 浏览: 29
C++OpenCV3源代码blur函数用法
在C++中,值调用和引用调用是函数参数传递的不同方式:
1. **值调用** (Pass by Value):
- 当我们把一个变量作为参数传递给函数时,默认是按值传递。这意味着函数接收到的是对原始变量的一个副本拷贝。如果函数内部修改了这个副本,原变量不会受到影响。
- 比如:
```cpp
void func(int x) {
x = 5; // 对副本进行操作
}
int main() {
int a = 10;
func(a);
cout << a; // 输出:10,a未变
}
```
2. **引用调用** (Pass by Reference):
- 使用`&`运算符可以将引用作为参数传递,这时函数实际上处理的是原始变量本身,而不是副本。所以,函数内部的操作会直接影响到原来的变量。
- 比如:
```cpp
void func(int& x) {
x = 5; // 直接修改引用所指向的变量
}
int main() {
int a = 10;
func(a);
cout << a; // 输出:5,a已被改变
}
```
**不同点**:
- **效率**:引用调用通常比值调用更高效,因为避免了复制大对象。
- **副作用**:引用允许函数直接修改实参,而值调用则不行,除非显式地返回并赋值给原始变量。
- **安全性**:值调用提供了一定的安全性,因为它不会意外地改变外部的原始数据。
阅读全文