有四种:值传递、引用传递、指针传递和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;
}
以上就是,值传递、引用传递、指针传递和右值引用传递,它们有自己的优缺点,在使用时要根据实际情况选择最合适的传参方式。