请考虑以下代码:
#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(){ }
在//1
,类类型仍被视为不完整的对象类型(相关部分N4296::9.2/2 [class.mem]
)。但是我们不能将class-member-access表达式应用于它。为什么?
你不能解释为什么这个节目是不正确的吗?
答案 0 :(得分:0)
因为成员访问操作符只能应用于完整类型,如C ++ 11 5.2.5 [expr.ref] / 2所指定的那样:
对于第一个选项(点),第一个表达式应具有完整的类类型。对于第二个选项(箭头),第一个表达式应具有指向完整类类型的指针。
如果您问为什么存在该规则:因为,除非该类已完成,因此已声明该成员,否则无法告知如何解释该成员名称。