이 글은 개인의 학습을 목적으로 정리한 글입니다. 이점 참고하고 읽어주세요 ;)
통상적으로 하나의 함수는 하나의 리턴 값을 반환하거나, 아니면 아예 리턴 값이 존재하지 않습니다. 이번 포스팅에서는 C++ 17 환경에서 2개 이상의 리턴 값을 반환하는 방법에 대해 알아보겠습니다.
#include <iostream>
#include <tuple>
using namespace std;
tuple<int, int> my_func()
{
return tuple<int, int>(123, 456);
}
int main()
{
tuple<int, int> result = my_func();
cout << get<0>(result) << " " << get<1>(result) << endl;
return 0;
}
우선 여러 개의 리턴 값을 반환하는 방법 중 하나는 <tuple>을 이용하는 방법입니다. tuple은 두 데이터로 이뤄진 한 쌍의 데이터 묶음을 저장 단위로 가지는 컨테이너로써, tuple 자료형을 리턴 값의 자료형으로 설정함으로써 두 개의 리턴 값을 반환할 수 있습니다.
std::get을 이용해서 위와 같이 my_func로부터 두 개의 리턴 값을 출력할 수 있습니다.
#include <iostream>
#include <tuple>
using namespace std;
auto my_func() // 리턴 타입 결정을 컴파일러에게 맡김
{
return tuple(123, 456, 789, 0); // 템플릿타이즈를 할 필요 x
}
int main()
{
auto[a, b, c, d] = my_func(); // 컴파일러가 설정한 자료형의 리턴값들을 배열에 저장
cout << a << " " << b << " " << c << " " << d << endl;
return 0;
}
C++17의 Release 모드에서는 더욱 간편한 방식으로 두 개 이상의 리턴 값을 반환할 수 있습니다.
우선 my_func 함수의 리턴 타입은 auto 선언을 통해 컴파일러에게 위임합니다. 그리고 리턴 타입에서 사용할 튜플의 자료형 역시 일일이 템플릿타이즈 할 필요 없이 괄호 안에 리턴할 데이터만 입력해줍니다.
그리고 main 함수에서는 auto 자료형의 컨테이너에 리턴값을 저장할 변수를 선언하고, 리턴 값을 가져올 함수를 할당해줍니다.
그리고 auto 컨테이너 안에 저장된 변수들을 일반 변수들처럼 사용하면 더욱 간편하게 두 개 이상의 리턴 값을 반환하여 사용할 수 있습니다.
'Information Technology > C++' 카테고리의 다른 글
[C++] 레이스 컨디션 (0) | 2020.01.02 |
---|---|
[C++] 멀티 쓰레딩 기초 (0) | 2020.01.01 |
[C++] 람다 함수와 std::function (0) | 2019.12.28 |
[C++] 파일의 임의 위치 접근하기 (0) | 2019.12.28 |
[C++] 파일 입출력 (0) | 2019.12.27 |