代码之家  ›  专栏  ›  技术社区  ›  razorozx

C++如何获取父数据类型的sizeof?

  •  1
  • razorozx  · 技术社区  · 8 年前
    1. 我有一个结构A,它包含结构B。
    2. 我想在里面有一个int 结构B保持结构A()的大小。
    3. 但是,结构B有一个 未知大小的向量,随时可能不同。
    4. 挥发性物质 vector将不断更改结构A的大小。

    在不创建指针的情况下,我怎么做呢?

    struct A {
        struct B {
            std::vector<int> some_Vector;       // unknown size
            size_t A_size = ????;               // must always return the total size of A
        };
    
        B struct_B;
    };
    
    1 回复  |  直到 8 年前
        1
  •  4
  •   StoryTeller - Unslander Monica    8 年前
    1. 向量本身的大小(如下所示 sizeof )是常量,并且不受其包含的元素数量的影响。区分其“逻辑大小”和“物理大小”。毕竟 sizeof(std::vector<int>) 必须求值为某个值,并且向量中没有任何对象,根本没有向量。向量的内容只影响成员返回的值 std::vector::size .

    2. 所以每个结构的大小都是恒定的。您只需要在两个结构都被完全定义之后获得它。您可以使用构造函数来实现这一点。而不是默认的初始值设定项。

      struct A {
          struct B {
              std::vector<int> some_Vector;      
              size_t A_size;
              B();               
          };
      
          B struct_B;
      };
      
      A::B::B() : A_size{sizeof(A)}, some_Vector{} {
      }
      

    不过,坦率地说,我看不出有什么理由有人想抓住 sizeof公司 结构,并在运行时保持不变。正如我已经说过的,它是恒定的。

    推荐文章