看看这里:
http://www.learncpp.com/cpp-tutorial/101-constructor-initialization-lists/
作者说:
class Something
{
private:
int m_nValue;
double m_dValue;
int *m_pnValue;
public:
Something()
{
m_nValue = 0;
m_dValue = 0.0;
m_pnValue = 0;
}
};
虽然这没有表现出好的风格,但它在C ++语言的语法中是有效的。
...
什么?为什么风格不好?我总是这样做,与作者建议的相比,它是完全可读的:
...
class Something
{
private:
int m_nValue;
double m_dValue;
int *m_pnValue;
public:
Something() : m_nValue(0), m_dValue(0.0), m_pnValue(0)
{
}
};
...
我第一次读到上面的内容时,我甚至都认为它不是有效的语法。现在我明白在某些情况下你有使用初始化列表,但在这些情况之外,为什么我会在分配看起来更容易阅读和理解时使用它们?
答案 0 :(得分:2)
如果对象有构造函数,那么你的版本调用默认构造函数然后调用赋值运算符,与使用构造值调用构造函数相比,这是浪费时间。有些对象甚至没有默认构造函数。
与所有变量类型的语法保持一致是有意义的,无论它们是否实际具有构造函数。如果您正在编写类模板,那么您可能甚至不知道它们是否存在。