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

Member access expression applying to a variable of an incomplete type

本文关键字:成员 访问 访问表 表达式 变量 应用于 类型      更新时间:2023-10-16

请考虑以下代码:

#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])。但是我们不能将类成员访问表达式应用于它。为什么?

您不能解释为什么该程序格式不正确吗?

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

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

如果你问为什么存在该规则:因为,除非类是完整的,以便成员已被声明,否则没有办法告诉如何解释成员名称。