メンバーを持つクラスとconst
、追加の値が入力された別のコンストラクターを呼び出す1つのコンストラクターがあります。通常、これにはコロン初期化子を使用できますが、関数は複雑(printf
/のsprintf
ような)であり、スタックで変数を使用する必要があります、したがって、コンストラクターの本体でこれを実行*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と宣言しました。
怖いキャストを使用したり、メンバーの性格を強制的に無効にしたりせずに、この問題を解決するための標準的な方法はありますconst
か?ここでの最良の解決策は何ですか?