두 멤버 만있는 std :: pair와 std :: tuple의 차이점은 무엇입니까?
멤버가 2 명 뿐인 an std::pair
과 an 의 차이가 std::tuple
있나요? ( std::pair
두 명만 필요하고 tuple
더 많거나 적을 수 있는 명백한 것 외에도 ...)
몇 가지 차이점이 있습니다.
std::tuple
표준 레이아웃이 될 수 없습니다 (적어도 표준에 따라야 할 필요 는 없음 ). 모든는std::pair<T, Y>
두 경우 표준 레이아웃입니다T
및Y
표준 레이아웃입니다.a
pair
보다 내용을 얻는 것이 조금 더 쉽습니다tuple
. 케이스는 단지 멤버 필드tuple
일 때 함수 호출을 사용해야pair
합니다.
하지만 그게 다입니다.
이것은 매우 늦게 대답 때문이 아니라, 참고 인 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가 작동하지 않지만 구조체에 유리한 점이라고 생각합니다.
'code' 카테고리의 다른 글
C #에서 Word 문서를 어떻게 만들 수 있습니까? (0) | 2020.10.24 |
---|---|
KDIFF 병합에서 A, B 및 C는 무엇입니까? (0) | 2020.10.24 |
Dalvik과 dalvik-cache는 무엇입니까? (0) | 2020.10.24 |
리소스 (.resx) 파일의 이점은 무엇입니까? (0) | 2020.10.24 |
서버의 파일과 비교 확인 (0) | 2020.10.24 |