c++ - 为什么我的类(class)规模为零?如何确保不同的对象具有不同的地址?

标签 c++ class

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

#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/

相关文章:

Python从类列表中选择项目

python - OOP:在初始化类时使用条件语句

c++ - 为什么声明不起作用

java - 使用类添加最终值。 java 。

c++ - 为包装列表自定义迭代器

python - 使用python从模块调用主文件中的函数

c++ - WIN32显示图像,为什么不显示?

c++ -/fp :fast 的奇怪结果

c++ - 跳转/尾调用到另一个函数

c++ - 在 Linux 上使用 CUDA 支持编译 OpenCv