- 我有包含结构 B 的结构 A。
- 我想在里面有一个整数 结构 B 来保存结构 A () 的大小。
- 但是,结构 B 有一个 未知大小的 vector ,可能随时不同。
- 易变的 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;
};
最佳答案
vector 本身的大小(由
sizeof
给出)是恒定的,不会受它包含多少元素的影响。区分其“逻辑大小”和“物理大小”。毕竟,sizeof(std::vector<int>)
必须评估某些东西,并且 vector 中没有任何对象,根本没有 vector 。 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
的原因一个结构并在运行时坚持下去。正如我已经说过的,它是不变的。
关于C++如何获取父数据类型的sizeof?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47822012/