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

C++ How to get sizeof of parent datatype?

  1. 我有包含结构 B 的结构 A。
  2. 我想在里面有一个int struct B 保存 struct 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. 向量本身的大小(由sizeof给出)是恒定的,不会受它包含多少元素的影响。区分它的"logical size"和"physical size"。毕竟,sizeof(std::vector<int>) 必须求值,而向量中没有任何对象,根本就没有向量。 vector的内容只影响成员返回的值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 结构并在 运行 时坚持下去的原因。正如我已经说过的,它是不变的。