从const
返回非const struct
数据成员指针是否正常或被视为不良做法?返回非const
指针有什么危险,如下所示?
widget_t * widget_child(const widget_t * parent)
{
if (!parent)
return NULL;
return parent->child;
}
答案 0 :(得分:1)
从const
- const
返回特定的非struct
数据成员是否可以接受完全取决于它所属的数据结构的语义。
这不是法律上的错误,C在这个问题上不能再说什么了
作为程序员,你(希望)了解和理解语义是可信的(出于对于效率的选择/效率)来选择正确的。
即使 const
- 合格,如果您确定自己是正确的并接受后果,C故意允许您覆盖。此覆盖采取明确演员的形式。
答案 1 :(得分:0)
这很好。指针本身就是价值(毕竟它是一个地址)。您从const
结构中读取该值。没关系。你返回那个值。这也很好。
答案 2 :(得分:0)
const
关键字实际上没有在C中定义任何常量。它所说的基本上是对编译器的承诺:const
标识符将在此特定上下文中被只读处理。 const
应该被理解为readonly
,这是从C开头的错误命名。
这将允许编译器进行某些优化,如果它怀疑被调用者在被调用函数中修改了这个标识符,它就无法做到。
基线是:这是完全合法的,因为保留了承诺。