我有这样一个情况,无法解释为什么它可以编译通过:
#include <iostream>
using namespace std;
class X {
public:
X() {cout << "in X constructor: " << endl;};
};
class Y {
public:
Y() {cout << "in Y constructor" << endl;};
private:
X x[];
};
int main() {
Y y;
return 0;
}
我正在定义一个变量大小的数组
X
,作为类 Y
的成员。如果在类外部这样定义 X
,肯定会导致编译错误,但是在类内部却不会。更重要的是,X
的构造函数从未被调用。那么这里发生了什么?
malloc
技巧,通过“好看”的类似数组的接口将任意数量的数据附加到结构体上。在C++中,这是g++和clang++的GNU扩展。例如,请参见https://dev59.com/43VC5IYBdhLWcg3wlyIo。 - dypmain()
中编译int x[]
时,我得到了编译错误:storage size of 'x' isn't known
。因此,我认为int x[0]
是一个大小为零的int
数组。 - Davor Josipovicerror: ISO C++ 禁止零大小数组 'x' [-pedantic]
。 - juanchopanza