成员访问表达式应用于不完整类型的变量

时间:2015-01-14 05:30:16

标签: c++ class

请考虑以下代码:

#include <iostream>

struct A
{
    static const int b = 42;
    static const A *a;
    int ca[b]; //OK
    int c[a -> b]; //1, ill-formed
};

int main(){ }

DEMO

//1,类类型仍被视为不完整的对象类型(相关部分N4296::9.2/2 [class.mem])。但是我们不能将class-member-access表达式应用于它。为什么?

你不能解释为什么这个节目是不正确的吗?

1 个答案:

答案 0 :(得分:0)

因为成员访问操作符只能应用于完整类型,如C ++ 11 5.2.5 [expr.ref] / 2所指定的那样:

  

对于第一个选项(点),第一个表达式应具有完整的类类型。对于第二个选项(箭头),第一个表达式应具有指向完整类类型的指针。

如果您问为什么存在该规则:因为,除非该类已完成,因此已声明该成员,否则无法告知如何解释该成员名称。