Czy jest możliwe, aby przeciążony konstruktor w jakiś sposób wywoływał innego konstruktora w klasie, podobnie do poniższego kodu?Czy istnieje konstruktor wygody w C++?
class A {
public:
A(std::string str) : m_str(str) {}
A(int i) { *this = std::move(A(std::to_string(i))); }
std::string m_str;
};
Powyższy kod działa, ale obawiam się, że wywoływanie go w konstruktorze może prowadzić do niezdefiniowanego zachowania.
Jeśli tak, proszę wyjaśnić, dlaczego, a także zaproponować lepszą alternatywę?
Termin szukasz jest delegowanie "konstruktorzy". – nwp
Dlaczego nie 'A (int i): m_str (std :: to_string (i)) {}'? – CoryKramer
To jest minimalny przykład. Chcę przeciążyć konstruktor, który akceptuje 7 parametrów, z których 4 mają wartości domyślne i chcę uniknąć jawnego ustawienia wartości domyślnych w więcej niż jednym miejscu. – Makaronodentro