C++常引用作为函数形参与引用作为函数形参的区别?
时间: 2024-12-23 09:17:40 浏览: 3
在C++中,使用常引用(const reference)和非常引用(reference)作为函数参数的主要区别在于它们对实参的修改能力。
**1. 常引用 (const reference)**[^1]:
常引用`int const& a`表示不会改变传入参数的原始值,它实际上创建了一个指向该参数的常量别名。当我们在函数内部对其进行操作时,实际上是操作原始变量,但不能修改它的值。如以下代码所示:
```cpp
void swap(const int &a, const int &b) {
a = b; // 不会改变原始变量,而是复制临时值
}
```
**2. 非常引用 (reference)**:
非常引用`int &a`允许函数直接修改传入参数的值。当我们调用`Swap(a, b)`时,`a`和`b`会被视为原始变量的引用,函数内的操作会对这些变量造成直接影响。例如:
```cpp
void Swap(int &a, int &b) {
a ^= b; // 直接修改a和b的值
}
```
所以,如果你不想在函数内部修改实参,应使用常引用;如果需要修改,则使用非常引用。
相关问题
c++迭代器作为函数形参
回答: 当迭代器作为函数形参时,如果在函数内改变迭代器所指向的值,会影响到外部。但是在函数内改变迭代器本身,并不会影响到外部,除非传入引用。具体代码中的例子可以看出,在test函数中,通过改变iter1所指向的值为666,会影响到main函数中iter1所指向的值。而在函数内改变iter2本身,并不会影响到main函数中的iter2的值。<em>1</em><em>2</em><em>3</em>
#### 引用[.reference_title]
- *1* *2* [学习笔记:C++ 迭代器详细说明](https://blog.csdn.net/weixin_43843155/article/details/104201945)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}} ] [.reference_item]
- *3* [C++迭代器作为参数传递进函数使用时的注意事项](https://blog.csdn.net/qq_39540537/article/details/108772892)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}} ] [.reference_item]
[ .reference_list ]
c++1.用数组作为函数形参实现函数,函数调用时实参为数组。 2.用数组作为函数形参实现函数,函数调用时实参为指针。 3.用指针作为函数形参实现函数,函数调用时实参为数组。 用指针作为函数形参实现函数,函数调用时实参为指针。
1. 用数组作为函数形参实现函数,函数调用时实参为数组:
```c
void func(int arr[], int size) {
// 函数体
}
int main() {
int arr[5] = {1, 2, 3, 4, 5};
func(arr, 5);
return 0;
}
```
2. 用数组作为函数形参实现函数,函数调用时实参为指针:
```c
void func(int *arr, int size) {
// 函数体
}
int main() {
int arr[5] = {1, 2, 3, 4, 5};
func(arr, 5);
return 0;
}
```
3. 用指针作为函数形参实现函数,函数调用时实参为数组:
```c
void func(int *arr, int size) {
// 函数体
}
int main() {
int arr[5] = {1, 2, 3, 4, 5};
func(&arr[0], 5);
return 0;
}
```
4. 用指针作为函数形参实现函数,函数调用时实参为指针:
```c
void func(int *arr, int size) {
// 函数体
}
int main() {
int arr[5] = {1, 2, 3, 4, 5};
func(arr, 5);
return 0;
}
```
注意,指针和数组在函数传参时有一些细微的差别,需要注意。
阅读全文