【发布时间】:2014-08-03 12:46:24
【问题描述】:
我有一个适用于 3d 网格的程序。这个网格有自己的类对象 Grid,看起来像这样(简化版):
class Grid
{
public:
Grid() { readDataFromInputFile(); }
private:
void readDataFromInputFile() {...} // this function reads the values for i, j, k from disk
int i; int j; int k;
};
我现在想做的是能够将变量 i、j 和 k 设置为 const int,以避免在其他函数中意外地将它们弄乱。然而,我不能轻易地将它们设置在成员初始化器列表中,因为它们必须从文件中读取。我一直在浏览现有的讨论,但找不到关于这个问题的准确讨论。
是否有解决方案可以将它们设置为 const,并且仍然可以使用复杂的函数来检索数据?在我的实际应用中,当然要读取的变量要多得多,初始化后不允许更改。
【问题讨论】:
-
糟糕,readDataFromInput 也是一个成员函数,我只是为了说明我使用了一个复杂的函数,包括从磁盘读取 .ini 文件中的多个变量的 IO。
-
我已经编辑了帖子,使其更加清晰。
-
看起来我正确理解了您的意思,即使代码没有多大意义。
-
一种选择是将变量设为
i_、j_、k_或其他不太可能的名称,并在构造函数中将类成员int const &i绑定到i_(这可以在i_赋值之前完成) -
“有没有办法可以将它们设置为 const...?” - 不,不是这种设计。
const表示它们必须在任何使用或访问使用之前进行初始化,包括构造函数主体、调用任何非静态成员函数等。像引用成员(const与否),它们必须出现在构造函数的字段初始值设定项列表中。没有什么可以逃避的。这就是语言的工作原理。马努的评估是正确的。
标签: c++ class initialization-list