C++ 如果向量成员更改大小,类成员偏移量是否会更改?

C++ 如果向量成员更改大小,类成员偏移量是否会更改?,c++,pointers,memory,integer-arithmetic,C++,Pointers,Memory,Integer Arithmetic,如果我有一门课,比如: class foo { std::vector<int> bar; int a; }; class-foo { 向量条; INTA; }; inta的偏移量会在整个运行期间保持不变吗?我的理解是,std::vector bar可以调整大小,并且向量包含在连续内存中的项。如果是这种情况,那么如果 Bar 在运行时调整大小,那么,在C++中,没有对象改变“ A/?> P>的偏移量吗?没有任何对象在运行时改变它的大小——所有完整的类型都是已知的

如果我有一门课,比如:

class foo 
{
    std::vector<int> bar;
    int a;
};
class-foo
{
向量条;
INTA;
};

inta
的偏移量会在整个运行期间保持不变吗?我的理解是,
std::vector bar
可以调整大小,并且向量包含在连续内存中的项。如果是这种情况,那么如果<代码> Bar <代码>在运行时调整大小,那么,在C++中,没有对象改变“<代码> A/<代码>?

> P>的偏移量吗?没有任何对象在运行时改变它的大小——所有完整的类型都是已知的和恒定的大小。
sizeof
运算符的结果是constexpr,这一事实反映了这一点;它是在编译时确定的


一个对象包含一个指针是很有可能的,事实上并不罕见,该指针在运行时的过程中可能指向不同大小的内存;但是内存驻留在其他地方,与对象无关(除了对象中的指针指向它这一巧合事实)。特别是,它名义上不是对象的一部分,也不影响其大小
std::vector
就是这样一种包含指针的类型。指针指向的位置以及该位置的可用内存量不会影响向量对象的大小。

Related@fas该链接实际上与OP的问题无关,他们询问更改向量成员的大小是否会影响布局。
向量
对象的大小不会改变,无论向量中有多少项(如果有)。向量内部维护的动态序列肯定会改变内存占用,但向量对象本身作为一个对象,其大小将是恒定的,因此,(a)任何
foo
实例,以及(b)成员
a
@cigien的偏移量与OP要求的是一样的:对象本身的大小是常数,缩进取决于它)和
vector::size
@WhozCraig Yes:)之间的差异,我只是澄清了OP的要求,因为建议的链接没有涵盖这一点。