文章目录

委托构造函数delegating constructor

其实最好使用默认参数值default value,代替重载以及委托构造函数。
委托构造函数可以减少代码量

#include <string>
class dummy {
public:
explicit dummy(int const& i) : s_{"Hello world"}, val_{i} {
}
explicit dummy() : dummy(5) {
}
std::string const& get_s() {
return s_;
}
int get_val() {
return val_;
}
private:
std::string s_;
const int val_;
};
auto main() -> int {
dummy d1(5);
dummy d2{};
}

explicit

如果一个类的构造函数只有一个参数(类型为A),那么不加这个explicit关键字,可以使用隐式转换,直接把一个A类型的变量赋值给某个对象。
但是这种方式不建议,所以可以加上explicit

#include <vector>

class intvec {
public:
// This one allows the implicit conversion
// intvec(std::vector<int>::size_type length)
// : vec_(length, 0);

// This one disallows it.
explicit intvec(std::vector<int>::size_type length)
: vec_(length, 0) {}

private:
std::vector<int> vec_;
};

auto main() -> int {
int const size = 20;
// Explictly calling the constructor.
intvec container1{size}; // Construction
intvec container2 = intvec{size}; // Assignment

// Implicit conversion.
// Probably not what we want.
// intvec container3 = size;
}