我试图更好地理解构造函数在C ++中的工作方式。基本上,我想知道在用构造函数中的成员初始化器列表初始化类时,是否按顺序设置了所有内容。
// Our <!DOCTYPE html> node
const doctype = document.implementation.createDocumentType('html', '', '');
// A new HTML5 document
const doc = document.implementation.createDocument("", 'html', doctype);
// We need to force null NS
const body = doc.createElementNS(null, 'body');
body.appendChild(doc.createTextNode('hello'));
doc.documentElement.appendChild(body);
const str = (new XMLSerializer).serializeToString(doc);
console.log(str);
我希望这是一种有效的机制,但是在某些特殊情况下,它可能行不通。
答案 0 :(得分:1)
非静态成员初始化的顺序由它们在类定义中出现的顺序确定。这与在构造函数初始化程序列表中列出这些成员的顺序无关。
您的示例;
如果在类定义中Constructor(int number1, int number2) : m_number1(number1), m_number2(m_number1 > 0 ? 0 : number2) { }
m_number2
出现在m_number1
之前,将无法正常工作。
如果类定义得到更新,则依赖于特定顺序可能会带来风险-因为更新会更改非静态成员在类声明中出现的顺序(例如,如果某些团队成员确定成员在逻辑上进行了分组)不同的方式。)