から '変更可能な' エミュレート:C - 私はこのようなC構造を持つC++
struct my_struct {
int i;
double d;
struct expensive_type * t;
};
この構造体のインスタンスは次のように作成され、初期化されます。
struct my_struct * my_new(int i , double d)
{
struct my_struct * s = malloc(sizeof * s);
s->i = i;
s->d = d;
s->t = NULL;
return s;
}
struct expensive_type * t
メンバーの計算はかなりあります高価であり、必要ではない可能性があります。それはNULL
に初期化され、後で必要に応じて計算されます:
const struct expensive_type * my_get_expensive(const struct my_struct * s)
{
if (!s->t)
s->t = my_expensive_alloc(s->i , s->d);
return s->t;
}
私は
struct expensive_type *
部材に
mutable
を使用していたCで
、それはローカルでのconstを離れてキャストC、すなわちに似た何かを達成することが可能である:
{
struct my_struct * mutable_s = (struct my_struct*) s;
mutable_s->t = ...;
}
または署名でconst
を削除して私の唯一の標準に準拠した代替品ですか?
Cの中に '変更可能なもの 'やそれに近いものはありません。 – DyZ
はい、' const'を削除するか、UBを被る必要があります。ニース投稿。良い答えはCの仕様を引用するでしょう。 – chux
なぜコードは 'my_get_expensive(const struct my_struct * s)'に 'const'を必要としますか?おそらく、その目標は別の方法で満足できるでしょうか? – chux