在 C 中将 const 结构成员作为非 const 返回:正常或损坏



const struct返回非const数据成员指针可以吗?返回非const指针有哪些危险,如下所示?

widget_t * widget_child(const widget_t * parent)
{
if (!parent)
    return NULL;
return parent->child;
}
是否可以

接受从const限定struct返回特定的非const数据成员完全取决于它所属的数据结构的语义。
这在法律上没有错,C不能在这个问题上多说什么。
作为程序员,您(希望)知道并理解语义是信任的(出于必要/为了效率)选择正确的。

即使它是const限定的,C故意允许你覆盖它,如果你确定你是对的,并接受后果。此重写采用显式强制转换的形式。

很好。指针本身就是值(毕竟它是一个地址)。从const结构中读取该值。没关系。返回该值。那也没关系。

const 关键字并没有真正定义 C 中的任何常量。它所说的基本上是对编译器的承诺:const标识符将在此特定上下文中以只读方式处理。 const应该读作readonly,这从C的开头开始就是不好的命名。

这将允许编译器执行某些优化,如果它怀疑被调用方在被调用函数中修改此标识符,则无法执行。

基线是:这是完全合法的,因为承诺是信守的。

最新更新