【发布时间】:2015-07-24 12:48:39
【问题描述】:
我们都知道空类或空类对象的大小为1字节。
我遇到了 sizeof 一个类及其对象为 0 的情况。该程序在语法上是正确的,因为没有编译或运行时错误。这是未定义的行为吗?我试图执行的用例是否有意义并且看起来像一个有效的用例?不为类中的数组提供确切的下标或大小是否是一个大错误?代码sn-p如下:
#include<iostream>
using namespace std;
class A
{
char a[];
};
int main()
{
A b;
cout<<sizeof(A)<<endl;
cout<<sizeof(b)<<endl;
return 0;
}
输出:
0
0
sizeof 一个空类是一个字节(基本上非零),其原因类似于“确保不同的对象具有不同的地址”。
在这种情况下,当sizeof 课程归零时会发生什么?
注意:int a[] 也观察到相同的行为。
【问题讨论】:
-
char a[];这不是合法的 C++ 语法。 -
"程序在语法上是正确的,因为没有编译或运行时错误。" - 我很确定存在“不需要诊断”语法错误。
-
@PaulMcKenzie 实际上,作为结构中的最后一个数据成员,
char a[];是有效的 C99。 -
@fredoverflow:C++ 不是 C99。
-
C++ 基本规则见stackoverflow.com/questions/621616/…