【发布时间】:2011-03-08 20:00:23
【问题描述】:
假设我的班级有私人成员 ptr、name、pname、rname、crname 和 age。如果我不自己初始化它们会怎样?这是一个例子:
class Example {
private:
int *ptr;
string name;
string *pname;
string &rname;
const string &crname;
int age;
public:
Example() {}
};
然后我做:
int main() {
Example ex;
}
ex 中的成员是如何初始化的?指针会发生什么? string 和 int 是否使用默认构造函数 string() 和 int() 初始化为 0?参考成员呢?还有 const 引用呢?
我想学习它,以便编写更好(无错误)的程序。任何反馈都会有所帮助!
【问题讨论】:
-
迈克,哦,我的意思是某本书中解释它的章节。不是整本书! :)
-
不过,阅读一整本关于您打算使用的编程语言的书可能是个好主意。如果你已经读过一本,但它没有解释这一点,那它就不是一本好书。
-
Scott Meyers(一位受欢迎的前 C++ 专家建议大师)在 Effective C++ 中指出,“在我看来,规则很复杂——太复杂以至于不值得记住。 ...确保所有构造函数都初始化对象中的所有内容。”因此,在他看来,(尝试)编写“无错误”代码的最简单方法不是试图记住规则(事实上他没有在书中列出它们),但是显式初始化所有内容。但是请注意,即使您在自己的代码中采用这种方法,您也可能会从事由不这样做的人编写的项目,因此这些规则可能仍然很有价值。
-
@TylerMcHenry 您认为哪些 C++ 书籍“好”?我读过几本关于 C++ 的书,但没有一本能完全解释这一点。正如我之前的评论中所指出的,Scott Meyers 明确拒绝提供Effective C++中的完整规则。我还阅读了 Meyers 的 Effective Modern C++、Dewhurst 的 C++ Common Knowledge 和 Stroustrup 的 A Tour of C++。在我的记忆中,没有一个解释了完整的规则。显然我可以阅读标准,但我几乎不会认为这是一本“好书”! :D 我希望 Stroustrup 可能会在 C++ 编程语言中解释它。
标签: c++ initialization member-initialization