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

时间:2017-12-14 21:05:06

标签: c++ vector struct sizeof volatile

  1. 我有结构A,它包含结构B。
  2. 我想要一个int里面 struct B保持struct A()的大小。
  3. 但是,结构B有一个 任何时候可能不同的未知大小的矢量。
  4. 挥发性 vector将不断改变struct A的大小。
  5. 如果不创建指针,我将如何做到这一点?

    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 个答案:

答案 0 :(得分:4)

  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{} {
    }
    
  3. 但坦率地说,我认为没有人会想要捕获sizeof结构并在运行时挂起它。正如我已经说过的那样,它是不变的。