【发布时间】:2014-05-21 22:34:26
【问题描述】:
看这里:
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)
{
}
};
...
我第一次阅读上述内容时,我什至不认为它是有效的语法。现在我知道在某些情况下您必须使用初始化列表,但在这些情况之外,当赋值似乎更容易阅读和理解时,我为什么要使用它们?
【问题讨论】:
-
写下你的意思。如果您要初始化,请初始化。
-
我会说列表始终有效并且不会浪费时间创建默认实例只是为了在之后分配给它,这非常好。
-
@chris ... 无论如何,这可能会被编译器完全优化。但是,是的!
-
注意在C++11中可以写
int m_nValue = 0; -
@πάνταῥεῖ,绝对不适用于编译器不可见默认构造函数定义的类。不确定是否有相同的 TU 非内联。
标签: c++ coding-style