본문 바로가기

Information Technology/C++

[C++] C++17에서 여러 개의 리턴값 반환

이 글은 개인의 학습을 목적으로 정리한 글입니다. 이점 참고하고 읽어주세요 ;)


통상적으로 하나의 함수는 하나의 리턴 값을 반환하거나, 아니면 아예 리턴 값이 존재하지 않습니다. 이번 포스팅에서는 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