C++函数的出参

在C#中,在 函数或方法的参数前添加上out 或ref 时,这个参数就是出参了。

在C++中主要是通过指针和引用实现来类似的功能。

#include <iostream>

// 使用指针作为出参
// getValues接受两个指向整数的指针,并通过这些指针修改了调用者提供的变量的值
void getValues(int *a, int *b) {
    *a = 10;
    *b = 20;
}

// 使用引用作为出参
// getValuesRef接受两个整数的引用,并直接修改了调用者提供的变量的值
void getValuesRef(int &a, int &b) {
    a = 30;
    b = 40;
}

int main() {
    int x, y;

    // 调用使用指针的函数
    getValues(&x, &y);
    std::cout << "Using pointers: x = " << x << ", y = " << y << std::endl;

    // 调用使用引用的函数
    getValuesRef(x, y);
    std::cout << "Using references: x = " << x << ", y = " << y << std::endl;

    return 0;
}

1、指针

指针可用直接操作所指向的内存地址,从而实现对变量的修改,达到类似于C#中ref和out的效果。

如下代码中,swap函数接受两个指向int类型的指针a和b,通过操作指针所指向的内存地址,实现了两个变量值的交换。

这类似于C#中ref的功能,因为可以在函数内部修改函数外部变量的值,并且在调用函数之前,变量需要先进行初始化。

#include <iostream>

void swap(int *a, int *b) {
    int temp = *a;
    *a = *b;
    *b = temp;
}

int main() {
    int num1 = 5, num2 = 10;
    swap(&num1, &num2);
    std::cout << "num1: " << num1 << ", num2: " << num2 << std::endl;
    return 0;
}

2、引用

引用是变量的别名,对引用的操作实际上就是对原变量的操作。

在如下代码中,increment函数接受一个int类型的引用num,在函数内部对num的修改会直接反映到员变量number上。

这类似于C#中的ref关键字,既可以将值传入函数,又可以在函数内部修改该值反映到函数外部。

#include <iostream>

void increment(int &num) {
    num++;
}

int main() {
    int number = 5;
    increment(number);
    std::cout << "number: " << number << std::endl;
    return 0;
}

总结

虽然C++没有像C#那样直接在语法上区分ref和out,但通过灵活运用指针和引用,可以实现类似的功能。

通常情况下,如果只是想在函数内部修改外部变量的值,可以使用引用;如果需要在函数内部动态地分配内存并将结果返回给外部变量,可能会使用指针。

posted @ 2025-01-05 11:16  青云Zeo  阅读(2)  评论(0编辑  收藏  举报