参数的默认值基于其他参数

Det*_*ing 5 c++ constructor default-arguments c++11 delegating-constructor

我想要实现这样一个类:

class A{
    int a;
    int b;
    int c;
    A():a(),b(),c(){};
    A(int ia,int ib,int ic=ia+ib):a(ia),b(ib),c(ic){};  //this is what i need
};
Run Code Online (Sandbox Code Playgroud)

我希望ic的默认值是基于ia和ib计算的,这里的代码在编译时会出错.

我想知道是否有办法得到这样的东西.

谢谢.

Jon*_*rdy 14

只需添加另一个构造函数重载:

A(int ia, int ib)
  : a(ia), b(ib), c(ia + ib) {}

A(int ia, int ib, int ic)
  : a(ia), b(ib), c(ic) {}
Run Code Online (Sandbox Code Playgroud)

对于更复杂的初始化,您可以避免使用C++ 11委托构造函数重复:

A(int ia, int ib)
  : A(ia, ib, ia + ib) {}

A(int ia, int ib, int ic)
  : a(ia), b(ib), c(ic) {}
Run Code Online (Sandbox Code Playgroud)