cpp learning

C++ 的函数返回值通常只有一种类型,返回值不能是数组或者是多种类型,但是有时候一个函数会对多个变量进行处理,因此我们需要知道如何从一个函数中得到多个值。

  1. 引用参数

    C++ 和 JAVA 不一样,默认情况下都是函数参数都是传值处理的,也就是拷贝副本处理,但是我通常情况下会传递引用处理,这样就避免了拷贝操作,直接在实际变量内存上处理 。

    void setName(std::string& name)
    
  2. 指针传参

    指针传参和引用传参是有区别的,指针指向变量的首地址,而引用仅仅是变量的别名,并不占内存。

    指针传参是在实际变量内存上面操作,但是和引用传参有区别的。因为指针有一个叫 nullptr 的宏定义(值为0),可以利用它传递空指针,因此我们的函数里面加上相应的判断,就有了默认参数函数的味道。

  3. 利用 new 产生内存作为返回值

    劝你善良,每次使用 new 都要进行相应的 delete 操作,最好别用,只是告诉你有这个方法。

  4. std::array

    强大的 STL 模板库提供了数组容器,很多新手会将数组作为返回值,很显然会死翘翘,为了方便广大新手,STL 库提供了数组容器,数组容器在 array 的头文件中,有如下特点

    • 有容器类该有的东西,例如遍历器,大小等等。
    • 支持复制
    • 数据存储在栈中,因此长度一旦分配将不变。和 vector 不同
    • array 不能像 C 数组一样转化为 array*

    我们用到了支持复制这条信息。作为容器类,支持复制使它拥有返回多个参数的能力。

  5. std::vector

    std::array 不同之处在于向量类是将数据存在堆中,长度可变,这就要看你对参数的要求了,如果长度相对固定,当然选 std::array ,毕竟栈比堆要快。

  6. tuple & pair

    tuple 元组容器类相当于 C 语言的结构体,可以容纳多个不同数据类型的变量。pair 功能类似,可以使用 std::get<>() 的方法访问元素,但是想想就复杂,可读性极差,不建议使用。(在 python 中元组是基本类型)

  7. 结构体

    可以将几个不同的变量合成一个有意义的结构体,到时返回结构体即可。

个人建议