c – 为什么班级的大小为零?如何确保不同的对象具有不同的地址?

我创建了一个类,但它的大小为零.现在,我怎样才能确定所有对象都有不同的地址? (我们知道,空类的大小不为零.)

#include<cstdio>
#include<iostream>
using namespace std;
class Test
{
    int arr[0];//Why is the sizezero?
};

int main()
{
    Test a,b;  
      cout <<"size of class"<<sizeof(a)<<endl;
       if (&a == &b)// now how we ensure about address of objects ?
          cout << "impossible " << endl;
       else
          cout << "Fine " << endl;//Why isn't the address the same? 

        return 0;
}        
最佳答案
你的班级定义是非法的. C不允许在任何上下文中使用大小为0的数组声明.但即使您将类定义完全清空,仍需要sizeof来计算非零值.

9/4 Complete objects and member subobjects of class type shall have
nonzero size.

换句话说,如果编译器接受类定义并将上面的sizeof计算为零,那么该编译器将超出标准C语言的范围.它必须是与标准C无关的编译器扩展.

因此,在这种情况下,“为什么”问题的唯一答案是:因为这是在编译器中实现的方式.

我不知道它与确保不同对象具有不同地址有什么关系.无论对象大小是否为零,编译器都可以轻松地强制执行此操作.

转载注明原文:c – 为什么班级的大小为零?如何确保不同的对象具有不同的地址? - 代码日志