gpt4 book ai didi

c++ - sizeof(值)与 sizeof(类型)?

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:54:51 25 4
gpt4 key购买 nike

考虑:

double data; 
double array[10];
std::vector<int> vec(4, 100);
MyClass myclass;

有区别吗:

sizeof(double);
sizeof(double[10]);
sizeof(std::vector<int>);
sizeof(MyClass);

sizeof(data);
sizeof(array);
sizeof(vec);
sizeof(myclass);

这两种语法是不同的还是完全等同的?所有这些都在编译时评估吗?如果不是,哪个在运行时评估?

最佳答案

唯一的区别在于语法和便利性。

从句法上讲,您可以在一种情况下省略括号,但在另一种情况下则不能:

double d;

sizeof(double); // compiles
sizeof(d); // compiles
sizeof d; // compiles
sizeof double; // does NOT compile

就便利性而言,考虑如下内容:

float a;

x = sizeof(float);

y = sizeof(a);

例如,如果您有时最终将 afloat 更改为 double,您还需要更改 sizeof(float)sizeof(double) 来匹配。如果您始终使用 sizeof(a),当您将 afloat 更改为 double 时,您所有的sizeof 的使用也会自动更改,无需任何编辑。后者在 C 中比在 C++ 中更常见,例如调用 malloc 时:

float *a = malloc(10 * sizeof(float));

对比

float *a = malloc(10 * sizeof(*a));

在第一种情况下,将第一个 float 更改为 double 将生成可编译但缓冲区溢出的代码。在第二种情况下,将(仅)float 更改为 double 效果很好。

关于c++ - sizeof(值)与 sizeof(类型)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12811696/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com