有四种:值传递、引用传递、指针传递和C++11新增的右值引用传递。
值传递
值传递是最常见的传参方式,也是C++函数调用时最安全的传参方式。值传递就是把函数的参数值复制一份传入函数中,函数对参数的操作不会影响到原参数值。值传递适用于简单的数据类型,比如int、float等,也可以用于结构体、类等复杂数据类型。
// 值传递示例 void swap(int a, int b) { int temp; temp = a; a = b; b = temp; } int main() { int x = 100; int y = 200; swap(x, y); cout << "x=" << x << ",y=" << y << endl; // 输出 x=100,y=200 return 0; }
引用传递
引用传递是C++函数参数传递中最常用的一种方式,它的本质就是把函数的参数值传入函数中,但是函数对参数的操作会影响到原参数值。引用传递可以避免函数参数值的复制,节省空间和时间,可以提高程序的运行效率。
// 引用传递示例 void swap(int &a, int &b) { int temp; temp = a; a = b; b = temp; } int main() { int x = 100; int y = 200; swap(x, y); cout << "x=" << x << ",y=" << y << endl; // 输出 x=200,y=100 return 0; }
指针传递
指针传递是把函数的参数地址传入函数中,函数对参数的操作会影响到原参数值,也可以避免函数参数值的复制,节省空间和时间,可以提高程序的运行效率。
// 指针传递示例 void swap(int *a, int *b) { int temp; temp = *a; *a = *b; *b = temp; } int main() { int x = 100; int y = 200; swap(&x, &y); cout << "x=" << x << ",y=" << y << endl; // 输出 x=200,y=100 return 0; }
右值引用传递
C++11新增的右值引用传递,是把函数的参数值传入函数中,函数对参数的操作会影响到原参数值,但是又不会复制参数值,可以节省空间和时间,可以提高程序的运行效率。
// 右值引用传递示例 void swap(int &&a, int &&b) { int temp; temp = a; a = b; b = temp; } int main() { int x = 100; int y = 200; swap(std::move(x), std::move(y)); cout << "x=" << x << ",y=" << y << endl; // 输出 x=200,y=100 return 0; }
以上就是,值传递、引用传递、指针传递和右值引用传递,它们有自己的优缺点,在使用时要根据实际情况选择最合适的传参方式。