什么是sizeof(某事)== 0?

时间:2011-02-14 15:00:25

标签: c++ templates sizeof

我有一个模板,它采用具有不同值的结构,例如:

struct Something
{
    char str[10];
    int value;
    ...
    ...
};

在函数内部我使用sizeof运算符:跳入内存sizeof(Something);

有时我想不跳任何东西;我希望sizeof返回零。如果我输入一个空结构,它将返回1;我可以在模板中放入什么来使sizeof返回零?

3 个答案:

答案 0 :(得分:21)

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

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

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)

答案 1 :(得分:14)

你怎么看?

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

是,输出为0.

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

答案 2 :(得分:3)

根据C ++标准,C ++中没有对象可能具有0大小。只有基类子对象可能有0个大小,但是你永远不能在那些上调用sizeof。你想要实现的是无法实现的:) 或者,用数学方法,等式

sizeof x == 0在C ++中没有对象解决方案:)