【发布时间】:2019-09-02 09:41:04
【问题描述】:
我必须从 .txt 文件中读取行,并想用它来初始化我的班级成员。一行中的第一个字符始终是一个数字。
class myClass{
private:
const int ID;
public:
myClass(const int id){
this->ID = id;
}
};
这样做会为构造函数提供“不为 Kontakt::ID 提供初始化程序”和 this->ID = id; 的“表达式必须是可修改的 Ivalue”
【问题讨论】:
-
myClass(const int id) : ID(id) {}? -
使用初始化列表。它的存在是有原因的;进行初始化。不要使用 ctor 主体,它在 初始化之后运行。顺便说一句;明确的
this->是多余的。 -
有趣的事实:一个对象必须在进入构造函数的主体之前完全初始化。即使您可以在构造函数的主体内分配一个成员,它也已经被初始化了。如果稍后在正文中分配成员,则浪费了初始化所花费的时间。这可能很昂贵,所以更喜欢初始化列表。有时有一个辅助函数是有益的:
myClass() : expensivemember(complexlogic()) {} -
@JesperJuhl 在成员之前使用
this->可以是样式的东西,表明使用的是成员。这类似于具有m_name之类的命名约定。使用现代 IDE,人们通常不会这样做,但这在风格上并没有错。
标签: c++ visual-studio class constants