应用于不完整类型变量的成员访问表达式
Member access expression applying to a variable of an incomplete type
考虑以下代码:
#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
,class类型仍然被认为是不完整的对象类型(相关部分N4296::9.2/2 [class.mem]
)。但是我们不能对它应用 class-member-access 表达式。为什么?
你不能解释为什么程序格式错误吗?
因为成员访问运算符只能应用于一个完整的类型,正如C++11 5.2.5所规定的[expr.ref]/2:
For the first option (dot) the first expression shall have complete class type. For the second option (arrow) the first expression shall have pointer to complete class type.
如果您问为什么存在该规则:因为,除非 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(){ }
在//1
,class类型仍然被认为是不完整的对象类型(相关部分N4296::9.2/2 [class.mem]
)。但是我们不能对它应用 class-member-access 表达式。为什么?
你不能解释为什么程序格式错误吗?
因为成员访问运算符只能应用于一个完整的类型,正如C++11 5.2.5所规定的[expr.ref]/2:
For the first option (dot) the first expression shall have complete class type. For the second option (arrow) the first expression shall have pointer to complete class type.
如果您问为什么存在该规则:因为,除非 class 完整,即成员已声明,否则无法说明如何解释成员名称。