C 또는 C++에서는 함수에서 둘 이상의 값을 반환할 수 없습니다. 여러 값을 반환하려면 함수와 함께 출력 매개변수를 제공해야 합니다. 여기에서 C++에서 튜플과 쌍 STL을 사용하여 함수에서 여러 값을 반환하는 또 다른 접근 방식을 볼 수 있습니다.
Tuple은 요소 컬렉션을 보유할 수 있는 개체이며 각 요소는 서로 다른 유형일 수 있습니다.
쌍은 서로 다른 유형일 수 있는 두 값의 집합을 만들 수 있습니다. 쌍은 기본적으로 두 개의 값만 허용되는 특수한 유형의 튜플입니다.
튜플과 쌍이 작동하는 방법을 볼 수 있는 한 가지 예를 살펴보겠습니다.
예시
#include<iostream> #include<tuple> #include<utility> using namespace std; tuple<int, string, char> my_function_tuple(int x, string y) { return make_tuple(x, y, 'A'); // make tuples with the values and return } std::pair<int, string> my_function_pair(int x, string y) { return std::make_pair(x, y); // make pair with the values and return } main() { int a; string b; char c; tie(a, b, c) = my_function_tuple(48, "Hello"); //unpack tuple pair<int, string> my_pair = my_function_pair(89,"World"); //get pair from function cout << "Values in tuple: "; cout << "(" << a << ", " << b << ", " << c << ")" << endl; cout << "Values in Pair: "; cout << "(" << my_pair.first << ", " << my_pair.second << ")" << endl; }
출력
Values in tuple: (48, Hello, A) Values in Pair: (89, World)
그렇다면 위 프로그램의 문제점은 무엇일까요? NULL은 일반적으로 (void*)0으로 정의됩니다. NULL을 정수형으로 변환할 수 있습니다. 따라서 my_func(NULL)의 함수 호출이 모호합니다.
NULL 대신 nullptr을 사용하면 아래와 같은 결과를 얻을 수 있습니다 -
예시
#include<iostream> using namespace std; int my_func(int N) { //function with integer type parameter cout << "Calling function my_func(int)"; } int my_func(char* str) { //overloaded function with char* type parameter cout << "calling function my_func(char *)"; } int main() { my_func(nullptr); //it will call my_func(char *), but will generate compiler error }
출력
calling function my_func(char *)
NULL이 예상되는 모든 위치에서 nullptr을 사용할 수 있습니다. NULL과 마찬가지로 nullptr도 모든 포인터 유형으로 변환될 수 있습니다. 그러나 이것은 NULL과 같은 정수 형식으로 암시적으로 변환할 수 없습니다.