gcc 4.7.1은 튜플에 대한 기본 클래스 최적화를 수행하지 않습니다. 이는 정말 유용한 기능이라고 생각합니다. 튜플은 4 바이트보다 큰 사실에서와 같이,이 경우공통 기본 클래스가 튜플에 대한 빈 기본 클래스 최적화를 깨뜨림
#include <tuple>
#include <cstdint>
#include <type_traits>
class A { };
class B : public A { std::uint32_t v_; };
class C : public A { };
static_assert(sizeof(B) == 4, "A has 32 bits.");
static_assert(std::is_empty<C>::value, "B is empty.");
static_assert(sizeof(std::tuple<B, C>) == 4, "C should be 32 bits.");
이 마지막 주장이 실패 : 그러나,이에 예기치 않은 제한이있을 나타납니다. 클래스 계층 구조를 깨지 않고이를 피할 수있는 방법이 있습니까? 아니면 다른 방법으로이 경우를 최적화하는 자체 쌍 구현을 구현해야합니까?
[this] (http://flamingdangerzone.com/cxx11/2012/07/06/optimal-tuple-i.html)도 도움이 될 수 있습니다. –
@AndyProwl, 재미있는 내용이지만 읽을 수는 있지만 즉시 연결되지 않습니다. . 두 튜플의 공통적 인 구현은 EBCO를 사용하지만, 여기에서 볼 수있는 EBCO 실패의 종류에 대해서는 알려주지 않습니다. – MvG
해당 최적화를 적용 할 수 없습니다. 튜플에는 ** 두 개의'A' 객체가 있고 각 객체에는 다른 주소가 있어야합니다. 코드에 튜플을 추가 할 필요가 없다면 네 번째 유형 인'struct D : B, C {}; '를 추가하면 sizeof (D) sizeof (B)를 볼 수 있습니다. –