一个空的类和一个空的结构体是如何编译的?

7
C++标准是否规定了类和结构体的编译布局?如果它们是空的,它们如何被编译出不同的结果?

对于第一个问题,绝对“不行”。对于第二个问题的答案是:类有一个隐式的“this”指针。 - paulsm4
11
第二个问题的回答是错误的。就这个问题而言,结构体和类没有任何区别。也就是说,一个结构体可以有虚拟成员。 - John Dibling
5
类和结构体本质上是相同的,唯一的区别在于默认的成员和基类访问权限。 - GManNickG
如果没有代码,就没有地方生成隐式的“this”指针。 - user207421
1个回答

13

在某种程度上确实如此,它表示除非作为基类使用(称为“空白基类优化”),否则必须为其分配空间。这是为了确保不同对象有不同的地址。

给定结构体和类是相同的,除了默认访问修饰符之外,它们被编译成相同的东西。在C++11中引入了“标准布局”类/结构体的概念,并确保空类的内存布局相同。


1
有没有指定分配多少空间?1字节吗? - Sebastian Hoffmann
2
据我所知,这并没有具体规定。为了满足对齐要求,它可能超过1个字节。 - K-ballo
我认为他们将char添加到一个空类中,并根据架构执行对齐操作? - unj2
@kunj2aan:听起来是一个明智的实现,但标准并没有强制要求。 - K-ballo
@Paranaix:看一下我的类似问题,https://dev59.com/62sy5IYBdhLWcg3w3Rrc - Linuxios
显示剩余2条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接