是什么一类成员明智的初始化和直接初始化之间的区别? 在这个类中定义的两个构造函数有什么区别?
class A
{
public:
int x;
int y;
A(int a, int b) : x(a), y(b)
{}
A(int a, int b)
{
x = a;
y = b;
}
};
是什么一类成员明智的初始化和直接初始化之间的区别? 在这个类中定义的两个构造函数有什么区别?
class A
{
public:
int x;
int y;
A(int a, int b) : x(a), y(b)
{}
A(int a, int b)
{
x = a;
y = b;
}
};
的理论答案已被其他会员送出。
务实,成员明智的初始化是在这些情况下使用:
MyClass & mMyClass
)。您需要执行成员方式的初始化,否则,它不会编译。const MyClass mMyClass
)。您还需要执行成员方式的初始化,否则,它不会编译。MyClass mMyClass
没有构造函数)。您还需要执行成员方式的初始化,否则,它不会编译。MyClass mMyClass
和sizeof(MyClass) = 1000000000
)。通过成员方式初始化,您只需构建一次。通过构造函数中的直接初始化,它被构建两次。第一个使用初始化和第二个没有使用初始化,它采用分配。在第二个中,成员x
和y
首先被默认初始化(其中零),然后它们分别被分配了a
和b
。
还要注意的是,在第二个,成员是缺省初始化仅当的类型的成员都具有非平凡默认构造函数。否则,不会进行初始化(正如@James在评论中指出的那样)。
现在看到这个题目就知道:
这就是我一直在寻找的答案。 – cppcoder
我的荣幸!尽管如果你接受它,我会更加高兴! =)(你可以在关闭的时候这么做吗?) – Fezvez