멤버가 두 명 뿐인 an std::pair
과 an 의 차이가 std::tuple
있나요? ( std::pair
두 명만 필요하고 tuple
더 많거나 적을 수 있는 명백한 것 외에도 …)
답변
답변
이것은 매우 늦게 대답 때문이 아니라, 참고 인 std::pair
멤버 변수로 정의되고, 그 크기는 사용하여 최적화 할 수없는 빈 기본 클래스 최적화를 ( first
그리고 second
하나 또는 둘 모두가 빈 클래스 인 경우에도 서로 다른 주소를 차지해야합니다). 이는 정렬 요구 사항 second_type
이 무엇이든간에 악화 되었으므로 최악의 경우 결과 std::pair
는 기본적으로 필요한 크기의 두 배가 될 것입니다.
std::tuple
도우미 함수를 통해서만 액세스 할 수 있으므로 둘 중 하나가 비어있는 경우 두 유형에서 파생되어 오버 헤드를 절약 할 수 있습니다. 적어도 GCC의 구현, 확실히이 작업을 수행합니다 … 당신이 이것을 확인하기 위해 헤더를 통해 찌를뿐만 아니라 거기에 수 이 증거로.
답변
std::tuple
의 이름은 이상 (한 여분의 문자)입니다. 더 많은 문자가 오른손으로 입력되므로 대부분의 사람들이 입력하기가 더 쉽습니다.
즉, std::pair
0, 1, 3 또는 그 이상이 아닌 두 개의 값만 가질 수 있습니다. 두 가지 값. 그러나 튜플에는 값 수에 대한 의미 적 제한이 거의 없습니다. 은 std::pair
, 그러므로, 당신이 실제로 값의 쌍을 지정하려는 경우에 사용하는보다 정확한 입력 안전 유형입니다.
답변
C ++ 17에서는 동일한 인터페이스를 사용하여 두 요소가있는 쌍과 튜플 모두에서 데이터를 읽을 수 있습니다.
auto [a, b] = FunctionToReturnPairOrTuple();
사용할 필요가 없습니다 get<>
🙂
답변
그만한 가치는 std :: tuple의 GDB 출력이 읽기가 훨씬 더 어렵다는 것을 알았습니다. 분명히 두 개 이상의 값이 필요하면 std :: pair가 작동하지 않지만 구조체에 유리한 점이라고 생각합니다.