1 C++函数如何像python一样返回多个返回值

使用过python的童鞋都知道,在python单个函数中可以返回多个函数值,比如:

# -*- coding: utf-8 -*-

def return_muliti_value():
    return 1,'helloworld',[1,2,3]

if __name__ == '__main__':
    a,b,c = return_muliti_value()

    print(a)
    print(b)
    print(c)

使用过C++同学的都知道,C++从语言标准上只允许函数返回一个返回值,比如

#include <iostream>

int GetAge()
{
    return 18;
}

int main()
{
    int age = GetAge();

    return 0;
}

但是在有的情况下我们需要函数返回多个返回值,比如返回值包括当前操作状态、返回值1、返回值2......。那么C++有没有方式可以在单个函数中返回多个返回值,让枯燥的C艹编程变得有趣起来呢?下面总结几种可以在单个函数中返回多个返回值的方法。

2 C++单个函数返回多个返回值的方法

2.1 函数参数传引用的方式

在单个函数参数中传递多个函数参数引用,这样就可以在函数中直接对所传递的参数进行赋值操作,从而达到返回多个返回值的目的,这种方式在作用上可以达到返回多个返回值的目的,但是写法上并不如python来的那么直观。

#include <iostream>

void GetUserAge(const std::string& user_name,bool& work_status,int& age)
{
    if (user_name.compare("xiaoli") == 0)
    {
        work_status = true;
        age = 18;
    }
    else
    {
        work_status = false;
        age = -1;
    }
}

int main()
{
    bool work_status = false;
    int age = -1;

    GetUserAge("xiaoli", work_status, age);

    std::cout << "查询结果:" << work_status << "    " << "年龄:" << age << std::endl;

    getchar();

    return 0;
}

2.2 使用std::pair返回两个返回值

使用std::pair这种抽象数据结构,该数据结构可以绑定两个异构成员。这种方式的弊端是只能返回两个值。

#include <iostream>

std::pair<bool, int> GetUserAge(const std::string& user_name)
{
    std::pair<bool, int> result;

    if (user_name.compare("xiaoli") == 0)
    {
        result = std::make_pair(true, 18);
    }
    else
    {
        result = std::make_pair(false, -1);
    }

    return result;
}

int main()
{
    std::pair<bool, int> result = GetUserAge("xiaolili");

    std::cout << "查询结果:" << result.first << "   " << "年龄:" << result.second << std::endl;

    getchar();

    return 0;
}

2.3 使用std::tuple返回三个或者三个以上返回值

std::tuple这种抽象数据结构可以将三个或者三个以上的异构成员绑定在一起,返回std::tuple作为函数返回值理论上可以返回三个或者三个以上的返回值。

#include <iostream>
#include <tuple>

std::tuple<bool, int,int> GetUserAge(const std::string& user_name)
{
    std::tuple<bool, int,int> result;

    if (user_name.compare("xiaoli") == 0)
    {
        result = std::make_tuple(true, 18,0);
    }
    else
    {
        result = std::make_tuple(false, -1,-1);
    }

    return result;
}

int main()
{
    std::tuple<bool, int,int> result = GetUserAge("xiaolili");

    bool work_status;
    int age;
    int user_id;

    std::tie(work_status, age, user_id) = result;

    std::cout << "查询结果:" << work_status << "    " << "年龄:" << age <<"   "<<"用户id:"<<user_id <<std::endl;

    getchar();

    return 0;
}