C++开发初级


853 浏览 5 years, 3 months

3.1.9 委托构造函数(仅限C++11)

版权声明: 转载请注明出处 http://www.codingsoho.com/
委托构造函数(仅限C++11)

委托构造函数(Delegating Constructor)允许构造函数调用同一个类的其他构造函数。然而,这个调用不能放在构造函数体内,而必须放在构造函数初始化器中。下面给出了一个示例:

SpreadsheetCell::SpreadsheetCell(const string& initialValue) :
  SpreadsheetCell(stringToDouble(initialValue))
{
}

当调用采用字符串做参数的构造函数(委托构造函数)的时候,首先将调用委托给目标,也就是采用double做参数的构造函数。当目标构造函数返回时,再执行委托构造函数。

当使用委托构造函数时,要注意避免出现构造函数的递归。例如:

class MyClass
{
  MyClass(char c) : MyClass(1.2) {}
  MyClass(double d) : MyClass("m") {}
}

第一个构造函数委托第二个构造函数,第二个构造函数又委托第一个。C++标准没有定义代码的这种行为,这取决于编译器。