什么是 sizeof(something) == 0?
我有一个模板,它采用具有不同值的结构,例如:
struct Something
{
char str[10];
int value;
...
...
};
在函数内部我使用 sizeof 运算符: 在内存中跳转 sizeof(Something);
有时我根本不想跳转任何内容;我希望 sizeof 返回零。如果我放入一个空结构体,它将返回 1;我可以在模板中放入什么以使 sizeof 返回零?
I have a template that takes a struct with different values, for example:
struct Something
{
char str[10];
int value;
...
...
};
And inside the function I use the sizeof operator: jump in memory sizeof(Something);
Sometimes I would like to not jump anything at all; I want sizeof to return zero. If I put in an empty struct it will return 1; what can I put in the template to make sizeof return zero?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
sizeof
永远不会为零。 (原因:sizeof(T)
是T[]
类型数组中元素之间的距离,并且要求元素有唯一的地址)。也许您可以使用模板来进行 sizeof 替换,通常使用 sizeof ,但专门针对一种特定类型给出零。
例如
sizeof
will never be zero. (Reason:sizeof (T)
is the distance between elements in an array of typeT[]
, and the elements are required to have unique addresses).Maybe you can use templates to make a sizeof replacement, that normally uses
sizeof
but is specialized for one particular type to give zero.e.g.
你对此有何看法?
是的,输出是 0。
但是这段代码不是标准的 C++。
What do you think about it?
Yes, output is 0.
But this code is not standard C++.
根据 C++ 标准,C++ 中的任何对象都不能具有 0 大小。只有基类子对象的大小可以为 0,但是您永远不能对其调用 sizeof。你想要实现的目标是无法实现的:)
或者,从数学角度来说,方程
sizeof x == 0
在 C++ 中没有对象解:)No object in C++ may have a 0 size according to the C++ standard. Only base-class subobjects MAY have 0 size but then you can never call sizeof on those. What you want to achieve is inachievable :)
or, to put it mathematically, the equation
sizeof x == 0
has no object solution in C++ :)