Вызов другого конструктора при создании объекта с константными членами

У меня класс сconst члены и один конструктор, который вызывает другой конструктор с заполненными дополнительными значениями. Обычно я мог бы использовать для этого инициализатор двоеточия, но функция сложная (printf/sprintf-подобно) и требует, чтобы я использовал переменную в стеке, поэтому я должен сделать это в теле конструктора и использовать assign*this на новый объект. Но, конечно, это неверно, потому что мои переменные-членыconst.

class A
{
public:
    A(int b) : b(b), c(0), d(0) // required because const
    {
        int newC = 0;
        int newD = 0;
        myfunc(b, &newC, &newD);
        *this = A(b, newC, newD); // invalid because members are const

        // "cannot define the implicit default assignment operator for 'A', because non-static const member 'b' can't use default assignment operator"
        // or, sometimes,
        // "error: overload resolution selected implicitly-deleted copy assignment operator"
    };
    A(int b, int c, int d) : b(b), c(c), d(d) { };

    const int b;
    const int c;
    const int d;
};

A a(0);

(Я явно не удалил оператор присваивания.) Я объявил члены const, потому что хотел бы, чтобы они были публичными, но не изменяемыми.

Есть ли какой-то канонический способ решения этой проблемы без использования страшных забросов и принудительного переопределения членов & apos;constНесс? Какое здесь лучшее решение?

Ответы на вопрос(4)

Ваш ответ на вопрос