C++ (某物)的大小=0是多少?

C++ (某物)的大小=0是多少?,c++,templates,sizeof,C++,Templates,Sizeof,我有一个模板,它采用具有不同值的结构,例如: struct Something { char str[10]; int value; ... ... }; 在函数内部,我使用sizeof操作符:在内存中跳转sizeof(Something) 有时候我想什么都不跳;我希望sizeof返回零。如果我放入一个空结构,它将返回1;我可以在模板中输入什么使sizeof返回零?sizeof永远不会为零。(原因:sizeof(T)是类型为T[]的数组中元素之间的距离,元素必须

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

struct Something
{
    char str[10];
    int value;
    ...
    ...
};
在函数内部,我使用sizeof操作符:在内存中跳转
sizeof(Something)


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

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

也许您可以使用模板来进行sizeof替换,该替换通常使用
sizeof
,但专门用于一种特定类型,以获得零

e、 g

模板
结构jumpoffset\u辅助对象
{
枚举{value=sizeof(T)};
};
模板
结构jumpoffset\u辅助对象
{
枚举{value=0};
};
#定义jumpoffset(T)(jumpoffset\u辅助对象::值)

< C++ >中没有对象可以根据C++标准有0的大小。只有基类子对象的大小可以为0,但不能对这些子对象调用sizeof。你想要达到的目标是无法实现的:) 或者,从数学上说,方程


<代码> x==0 在C++中没有对象解决方案:)

 #include <iostream>
 struct ZeroMemory {
     int *a[0];
 };
 int main() {
     std::cout << sizeof(ZeroMemory);
 }
#包括
结构零内存{
int*a[0];
};
int main(){

std::您不能重载
sizeof
operator@Let_Me_Be-我不认为这是建议的,但您可以制作外观和行为类似的东西,但对于您关心的情况返回0。@awoodland好的,是的,但它不能称为sizeof。@Let_Me_be:我从来没有说过要重新定义
sizeof
keywORD,但要做一些新的,可以使用的。相关的问题:C中的空结构的大小是0,正确吗?在C++标准中强制1是什么原理?什么是“1”?,一个未知值的强制填充字节?因为空结构的数组仍然必须addressable@lundin:它实际上不一定是1字节。它可以是4(在我的机器上是)或任何其他非负整数matter@Lundin确实,我刚刚做过C和C++实验(GCC 4.3.2)空结构上的sisiof运算符是C中的0,C++中的1,是的,你得到了我的结论:
 #include <iostream>
 struct ZeroMemory {
     int *a[0];
 };
 int main() {
     std::cout << sizeof(ZeroMemory);
 }