C++ 为什么初始化列表优先于分配?
请看这里: 作者说:C++ 为什么初始化列表优先于分配?,c++,coding-style,C++,Coding Style,请看这里: 作者说: 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;
}
};
<>虽然这不显示好的风格,但它在C++语言的语法中是有效的。
什么?为什么它不是好的风格?我一直都是这样做的,与作者的建议相比,它是完全可读的:
当我第一次读到上面的内容时,我甚至没有意识到它是有效的语法。现在我了解到有些情况下您必须使用初始化列表,但除了这些情况之外,当赋值看起来更容易阅读和理解时,为什么我要使用它们?如果对象有构造函数,那么您的版本会调用默认构造函数,然后调用赋值运算符,与使用构造值调用构造函数相比,这是浪费时间。有些对象甚至没有默认构造函数
与所有变量类型的语法保持一致是有意义的,无论它们是否实际具有构造函数。如果您正在编写一个类模板,那么您可能甚至不知道它们是否会这样做。写下您的意思。如果你想初始化,那就初始化。我想说的是,列表始终有效,而且不浪费时间创建一个默认实例来分配给它,这非常好。@chris。。。无论如何,编译器可能会对其进行优化。但是,是的!注意,在C++11中,您可以编写
intm\u nValue=0代码>@πάνταῥεῖ, 对于默认构造函数定义对编译器不可见的类,肯定不是这样。不确定是否有相同的TU非内联的。
class Something
{
private:
int m_nValue;
double m_dValue;
int *m_pnValue;
public:
Something() : m_nValue(0), m_dValue(0.0), m_pnValue(0)
{
}
};