为什么初始化列表优先于分配?

时间:2014-05-21 22:34:26

标签: c++ coding-style

看看这里:

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)
    {
    }
};

...

我第一次读到上面的内容时,我甚至都认为它不是有效的语法。现在我明白在某些情况下你使用初始化列表,但在这些情况之外,为什么我会在分配看起来更容易阅读和理解时使用它们?

1 个答案:

答案 0 :(得分:2)

如果对象有构造函数,那么你的版本调用默认构造函数然后调用赋值运算符,与使用构造值调用构造函数相比,这是浪费时间。有些对象甚至没有默认构造函数。

与所有变量类型的语法保持一致是有意义的,无论它们是否实际具有构造函数。如果您正在编写类模板,那么您可能甚至不知道它们是否存在。