如何通过引用获取对象的大小?

sky*_*oor 4 c++ reference sizeof

假设我有一堂课

class Foo {

:
:

}
Run Code Online (Sandbox Code Playgroud)

我有另一个功能

void getf( Foo &f) {

:
:

std::cout<<sizeof f<<std::endl;
}
Run Code Online (Sandbox Code Playgroud)

在我处理数据并将大量数据分配给f(包含在Foo成员中的向量)之后,我需要f对象的大小

但是,正如我上面所做的那样,我总是得到16,这是参考的大小.

我做错了什么吗?怎么做?

谢谢!

kbr*_*ton 8

sizeof返回类型的大小.通常是时间,如在a的情况下,Vector类型的大小不一定包括类型可能指向的所有内容的累积大小.例如,类型:

class Foo {
   char* chars
}
Run Code Online (Sandbox Code Playgroud)

...将显示相同的 sizeof结果,无论是chars指向单个字节还是指向40Kb字符串.


Jus*_*ini 5

根据此IBM参考,sizeof应用于引用将返回引用对象的大小:

结果是引用对象的大小.

所以,我认为问题不在于sizeof返回引用本身的大小,而是Foo保持指向其他类型的指针.

还要记住,它sizeof不会告诉您vector(或使用堆的任何其他容器)内的数据大小.请考虑以下示例:

struct Foo {
    std::vector<int> v;
}

int main(int argc, char **argv) {
    Foo foo;
    std::cout << sizeof(foo) << std::endl;
    foo.v.push_back(1);
    std::cout << sizeof(foo) << std::endl;
}

Output:
24
24
Run Code Online (Sandbox Code Playgroud)

  • 从C++标准:`5.3.3/2 sizeof:当应用于引用或引用类型时,结果是引用类型的大小. (2认同)