假设有一个ClassAClass ClassA
{
public:
    ClassA();
    void Func()1;
    ...
private:
    CString m_str;
};
那么他的构造函数是1.
ClassA()
{
m_str = _T("abc");
}
好呢?
还是2.
ClassA()
:m_str(_T("abc"))
{
}
好呢?
虽然是个小问题。。可能很多人都嗤之以鼻,但我抱着养成好的编程习惯的角度来讨论这个问题,
我的理解是方法2构造函数好,因为它直接以值"abc"构造,而方法1是先默认构造m_str,再以"abc"赋值,多了一个步骤。。但现在我所接触的代码基本都是以方法1的形式来写的,让我很困惑,我觉得方法2的写法也很清晰明了,为什么不采用呢?
想听听大家的看法

解决方案 »

  1.   

    MFC的风格就是第二种...  C++ Primer上的风格也是第二种
      

  2.   

    你自己写的当然可以这样啊;
    不过MFC中的对话框中的控件赋初值都是按第一种来做的,也是一种规范吧,方便理解
      

  3.   

    方法1实际的构造过程是这样的:先调用m_str类型的构造函数构造一个临时变量,然后将这个临时变量全拷贝到m_str,然后销毁这个临时变量;
    而方法2就是直接调用m_str的构造函数来初始化的;
    所以,很明显在大部分情况下方法2的效率要比方法1要高,
    但如果m_str的类型是内置类型,那方法1跟方法2的效率差不多,因为内置类型的构造析构等函数都做了很高的优化,效率影响不大。
      

  4.   

    方法2,有3种情况是必须使用的。
    1,初始化的数据成员是对象的情况
    2,初始化const修饰的类成员
    3,初始化引用成员数据
    --
    除此之外,我觉得都能写到构造函数体。
    因为初始化列表太长的话,有点不整齐。
      

  5.   

    第二个是类的初始化列表,类的有些成员变量只能在初始化列表中被初始化,比如类的const常量成员
      

  6.   

    不是每个人都知道第二种方法的 不是每个人都用const的
      

  7.   

    第一种不过mfc  是第一种都熟悉 看得懂就行了