我有一个模板,它采用具有不同值的结构,例如:
struct Something
{
char str[10];
int value;
...
...
};
在函数内部我使用sizeof运算符:跳入内存sizeof(Something);
有时我想不跳任何东西;我希望sizeof返回零。如果我输入一个空结构,它将返回1;我可以在模板中放入什么来使sizeof返回零?
答案 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 ++中没有对象解决方案:)