我创建了一个类,但它的大小为零。现在,我如何确定所有对象都有不同的地址? (我们知道,空类的大小不为零。)
#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++ - 为什么我的类(class)规模为零?如何确保不同的对象具有不同的地址?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18551174/