我有一个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;
}
在C++中,我会在struct expensive_type *
件上使用的mutable
,是有可能实现用C类似的东西,即本地虚掷的常量:
{
struct my_struct * mutable_s = (struct my_struct*) s;
mutable_s->t = ...;
}
还是在签名移除const
我唯一符合标准的替代方案?
C中没有'mutable'或任何接近它的东西。 – DyZ
是的,需要删除'const'或遭受UB。不错的帖子。一个好的答案会引用C规范。 – chux
为什么代码需要'my_get_expensive(const struct my_struct * s)'中的'const'?也许这个目标可以用另一种方式来满足? – chux