C++如何获取父数据类型的大小? 我有一个包含结构B的结构A。 我想在里面有一个int 结构B以保持结构A的大小。 但是,结构B有一个 在任何时候都可能不同的未知大小的向量。 易变的 vector将不断更改结构A的大小。

C++如何获取父数据类型的大小? 我有一个包含结构B的结构A。 我想在里面有一个int 结构B以保持结构A的大小。 但是,结构B有一个 在任何时候都可能不同的未知大小的向量。 易变的 vector将不断更改结构A的大小。,c++,vector,struct,sizeof,volatile,C++,Vector,Struct,Sizeof,Volatile,在不创建指针的情况下,我该如何做呢 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; }; sizeof给出的向量本身的大小是恒定的,并且不受它

在不创建指针的情况下,我该如何做呢

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;
};
sizeof给出的向量本身的大小是恒定的,并且不受它所包含的元素数量的影响。区分其逻辑大小和物理大小。毕竟,sizeofstd::vector必须计算为某种值,并且向量中没有任何对象,根本没有向量。向量的内容只影响成员std::vector::size返回的值

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

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给出的向量本身的大小是恒定的,并且不受它所包含的元素数量的影响。区分其逻辑大小和物理大小。毕竟,sizeofstd::vector必须计算为某种值,并且向量中没有任何对象,根本没有向量。向量的内容只影响成员std::vector::size返回的值

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

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{} {
}

不过,坦率地说,我看不出有什么理由有人想要捕获结构的大小,并在运行时保留它。正如我已经说过的,它是常量。

而不创建指针吗?vector可能是用指针实现的,请参阅。使用函数。sizeofsome_vector永远不会更改。我怀疑你有一个XY问题,看:你的假设,易变向量会不断改变结构A的大小。这是错误的。std::vector的字节大小是恒定的,因为它将数据保存在动态内存中,并且只保存指向其数据开始和大小或开始和结束的指针,而不创建指针?vector可能是用指针实现的,请参阅。使用函数。sizeofsome_vector永远不会更改。我怀疑你有一个XY问题,看:你的假设,易变向量会不断改变结构A的大小。这是错误的。std::vector的字节大小是恒定的,因为它将数据保存在动态内存中,并且只保存指向其数据开始和大小或开始和结束的指针