我正在阅读C++14标准N3797,遇到了3.3.7/1:
如果在类中重新排序成员声明可以产生另一种有效程序(在(1)和(2)下),则该程序是不正确的,无需进行诊断。
这里的(1)和(2)是:
1)在类中声明的名称的潜在作用域不仅包括紧随名称的声明点之后的声明区域,还包括该类中非静态数据成员的所有函数体、默认参数、异常规格说明和括号等于初始化项(包括嵌套类中的这些内容)。
2)在类S中使用的名称N应当在其上下文中引用同一声明,并在S的完成作用域中重新评估时引用同一声明。对于违反此规则的情况,无需进行诊断。
也就是说,如果我们编写以下内容:
class A
{
int a;
int b;
}
那么程序就是非法的。重新排列成员声明会产生另一个有效的程序:
class A
{
int b;
int a;
}
我可能没有正确理解这个规则吗?