第一个例子将通过初始化的元素自动地知道它的大小。 第二个示例要求您明确定义数组的长度(以使其工作)。 为什么会这样?这背后有原因吗?
const int intArray[] = { 0, 1, 2 };
struct Example
{
int SizeOfArray()
{
return sizeof(intArray);
}
};
struct Example
{
const int intArray[] = { 0, 1, 2 };
int SizeOfArray()
{
return sizeof(intArray);
}
};
错误:无法为数组指定显式初始化程序
struct Example
{
const int intArray[3] = { 0, 1, 2 };
int SizeOfArray()
{
return sizeof(intArray);
}
};
答案 0 :(得分:3)
我认为这是因为类内/结构初始化只是在不同的地方编写部分初始化列表的语法糖。根据这个,您的错误示例等于以下内容:
struct Example
{
const int intArray[];
Example() :
// start of compiler-generated pseudo code
intArray[0](0),
intArray[1](1),
intArray[2](2)
// end of compiler-generated pseudo code
{
}
int SizeOfArray()
{
return sizeof(intArray);
}
};
上面的代码显然定义了一个未知大小的不完整结构,就像@harper在他的评论中所说的那样。
P.S。无法在标准中找到证据,但我很确定它涵盖了这种情况,可能是隐含的。