我想做以下事情:
class DelegatingCTorPlusInClass
{
public:
DelegatingCTorPlusInClass()
:
DelegatingCTorPlusInClass(m_a, m_b) // m_a and m_b are "random"
{
};
DelegatingCTorPlusInClass(int a)
:
DelegatingCTorPlusInClass(a, m_b) // m_b is "random"
{
};
DelegatingCTorPlusInClass(const std::string &b)
:
DelegatingCTorPlusInClass(m_a, b) // m_a is "random"
{
};
DelegatingCTorPlusInClass(int a, const std::string &b)
:
m_a(a),
m_b(b)
{
// DO THINGS
};
private:
int m_a = 42;
std::string m_b = "42";
};
但是,从一个构造函数传递给另一个构造函数的成员尚未初始化,因此基本上是“随机”的。那我怎样才能实现类似的目标呢?
最佳答案
[class.base.init]/9
:
这证明在主构造函数中为成员分配了垃圾:
DelegatingCTorPlusInClass(int a, const std::string &b)
:
m_a(a), // this is mem-initializer for m_a, so m_a = 42 is ignored and you are getting garbage
m_b(b) // the same for m_b
{
};
为了避免重复使用默认值,您可以为它们使用常量,因此您将获得以下内容:
DelegatingCTorPlusInClass() : DelegatingCTorPlusInClass(m_a_default, m_b_default)
{
};
关于c++ - 使用类内成员初始化委派构造函数,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/26866859/