然而,随着 C++ 的发展,开发人员发现某些用例中,拥有与类同名的数据成员可能会有所帮助。一种这样的场景是在实现某些设计模式或约定时,类名本身作为成员变量是有意义的。
例如,考虑以下示例:
struct Employee {
std::string Employee; // Storing the name of the employee
int EmployeeID; // Storing the ID of the employee
// Other member functions and data
};
这是来自DR80的。换句话说,
static
最初是为了与 C 保持一致,但在 96 年 5 月和 96 年 9 月的工作文件之间,该标准被更改并被static
删除。C++03 通过缺陷报告从语言中恢复了该错误。与 C++98 相比,放宽 C++03 中与类同名的数据成员的规则的动机主要是为了为开发人员提供更大的灵活性和便利性。
在 C++98 中,设置限制是为了避免代码中潜在的混乱和歧义。允许数据成员与类本身具有相同的名称可能会导致混乱,特别是对于那些刚接触该语言或维护大型代码库的人来说。
然而,随着 C++ 的发展,开发人员发现某些用例中,拥有与类同名的数据成员可能会有所帮助。一种这样的场景是在实现某些设计模式或约定时,类名本身作为成员变量是有意义的。
例如,考虑以下示例:
在此示例中,使用名为 Employee 的成员变量使代码更加直观且不言自明。
通过放宽 C++03 中的规则以允许在没有用户声明的构造函数时进行此类使用,该标准适应了这些场景,而不会牺牲代码的清晰度或引入明显的混乱。这一变化使开发人员能够更自由地以符合其概念模型的方式构建代码,而不违反语言规则。