什么是 sizeof(something) == 0?

发布于 2024-10-17 08:01:16 字数 276 浏览 6 评论 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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

羞稚 2024-10-24 08:01:16

sizeof 永远不会为零。 (原因:sizeof(T)T[]类型数组中元素之间的距离,并且要求元素有唯一的地址)。

也许您可以使用模板来进行 sizeof 替换,通常使用 sizeof ,但专门针对一种特定类型给出零。

例如

template <typename T>
struct jumpoffset_helper
{
    enum { value = sizeof (T) };
};


template <>
struct jumpoffset_helper<Empty>
{
    enum { value = 0 };
};

#define jumpoffset(T) (jumpoffset_helper<T>::value)

sizeof will never be zero. (Reason: sizeof (T) is the distance between elements in an array of type T[], 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.

template <typename T>
struct jumpoffset_helper
{
    enum { value = sizeof (T) };
};


template <>
struct jumpoffset_helper<Empty>
{
    enum { value = 0 };
};

#define jumpoffset(T) (jumpoffset_helper<T>::value)
-残月青衣踏尘吟 2024-10-24 08:01:16

你对此有何看法?

 #include <iostream>
 struct ZeroMemory {
     int *a[0];
 };
 int main() {
     std::cout << sizeof(ZeroMemory);
 }

是的,输出是 0。

但是这段代码不是标准的 C++。

What do you think about it?

 #include <iostream>
 struct ZeroMemory {
     int *a[0];
 };
 int main() {
     std::cout << sizeof(ZeroMemory);
 }

Yes, output is 0.

But this code is not standard C++.

世俗缘 2024-10-24 08:01:16

根据 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++ :)

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文