为什么数组大小初始化在类/ struct / ...内部或外部不同?

时间:2013-12-29 11:23:15

标签: c++ arrays class struct

第一个例子将通过初始化的元素自动地知道它的大小。 第二个示例要求您明确定义数组的长度(以使其工作)。 为什么会这样?这背后有原因吗?

类/ struct /...

之外的数组初始化
const int intArray[] = { 0, 1, 2 };

struct Example
{
    int SizeOfArray()
    {
        return sizeof(intArray);
    }
};

类/ struct /...

中的数组初始化

断裂作用

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);
    }
};

1 个答案:

答案 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。无法在标准中找到证据,但我很确定它涵盖了这种情况,可能是隐含的。