gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:56:44 25 4
gpt4 key购买 nike

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

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

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com