在C中返回const struct成员为非const:好还是坏?

时间:2014-04-06 01:27:14

标签: c pointers struct const

const返回非const struct数据成员指针是否正常或被视为不良做法?返回非const指针有什么危险,如下所示?

widget_t * widget_child(const widget_t * parent)
{
if (!parent)
    return NULL;

return parent->child;
}

3 个答案:

答案 0 :(得分:1)

const - const返回特定的非struct数据成员是否可以接受完全取决于它所属的数据结构的语义。
这不是法律上的错误,C在这个问题上不能再说什么了 作为程序员,你(希望)了解和理解语义是可信的(出于对于效率的选择/效率)来选择正确的。

即使 const - 合格,如果您确定自己是正确的并接受后果,C故意允许您覆盖此覆盖采取明确演员的形式。

答案 1 :(得分:0)

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

答案 2 :(得分:0)

const关键字实际上没有在C中定义任何常量。它所说的基本上是对编译器的承诺:const标识符将在此特定上下文中被只读处理。 const应该被理解为readonly,这是从C开头的错误命名。

这将允许编译器进行某些优化,如果它怀疑被调用者在被调用函数中修改了这个标识符,它就无法做到。

基线是:这是完全合法的,因为保留了承诺。