c++++ 中有四种函数调用约定:通过值传递、通过指针传递、通过引用传递和通过 rvo 传递。通过值传递传递参数的副本,通过指针传递传递参数的地址,通过引用传递传递参数的引用,而通过 rvo 传递则在特定条件下直接移动对象的内容。

C++ 函数调用约定
函数调用约定规定了如何在函数调用过程中传递参数,以及在调用返回时如何返回结果。C++ 中有四种主要的函数调用约定:
1. 通过值传递(pass-by-value)
立即学习“C++免费学习笔记(深入)”;
家政服务平台系统包含家用电器安装清洗、搬家、家电维修、管道疏通、月嫂保姆、育儿陪护、上门开锁等多种服务项目,用户可以直接通过家政小程序咨询,在线预约服务类型,同时还设置有知识科普,给用户科普一些清洁保养小技巧,让用户能够足不出户就可以直接预约服务,方便又快捷。本项目使用微信小程序平台进行开发。使用腾讯专门的小程序云开发技术,云资源包含云函数,数据库,带宽,存储空间,定时器等,资源配额价格低廉,无需
- 参数的副本传递给函数。
- 函数对副本进行操作,不影响原始值。
- 对于基本类型(int、float 等)高效。
2. 通过指针传递(pass-by-pointer)
- 参数的地址传递给函数。
- 函数可以通过指针指向并修改原始值。
- 允许函数返回可变数量的参数。
3. 通过引用传递(pass-by-reference)
- 参数的引用(别名)传递给函数。
- 函数可以通过引用指向并修改原始值。
- 比通过指针传递效率更高(避免了指针解引用)。
4. 通过 RVO 传递(return value optimization,返回值优化)
- 当一个函数返回一个非引用对象且该对象尚未被任何其他对象引用时,则编译器会执行 RVO。
- 在 RVO 中,函数直接将对象的内容移动到调用者的上下文中,而不是创建并返回一个临时副本。
实战案例
// 通过值传递整数
void func_by_val(int val) {
val++; // 不会影响原始值
}
// 通过指针传递整数
void func_by_ptr(int *val) {
(*val)++; // 会影响原始值
}
// 通过引用传递整数
void func_by_ref(int &val) {
val++; // 会影响原始值
}
int main() {
int a = 5;
func_by_val(a);
std::cout << a << std::endl; // 输出 5
func_by_ptr(&a);
std::cout << a << std::endl; // 输出 6
func_by_ref(a);
std::cout << a << std::endl; // 输出 7
}









