访问器函数采用 const arg 但在 C 中返回非 const 指针

Posted

技术标签:

【中文标题】访问器函数采用 const arg 但在 C 中返回非 const 指针【英文标题】:Accessor function taking a const arg but returning non const pointer in C 【发布时间】:2011-07-28 12:45:31 【问题描述】:

在这里寻求一些建议。

我有一个结构,其中包含指向另一个结构的指针,如下所示:

struct item

    int type;
    struct user *owner;
;

我也有访问器函数,像这样:

int item_get_type(const struct item * i);
struct user * item_get_owner(const struct item * i);

我的问题是关于这些函数中的第二个:这是否违反了关于使用 const 的任何规则或最佳实践?

我在这里使用 const 的原因是表示访问函数不会修改传递给它的结构,但允许调用者修改返回的结构。我最好在参数中删除 const 吗?

【问题讨论】:

正如下面@Graham 所说,您所做的一切都很好。如果您的意图是不允许调用者修改返回的结构,则返回类型将是 const struct user* 【参考方案1】:

绝对没问题,它正确地表明了你的意图。

【讨论】:

【参考方案2】:

此外,即使用户很容易修改结构,使用const 仍然很好,因为它有助于编译器优化函数中的代码。编译器会知道它永远不需要修改函数内部的结构。

【讨论】:

以上是关于访问器函数采用 const arg 但在 C 中返回非 const 指针的主要内容,如果未能解决你的问题,请参考以下文章

关于static/const的作用

C 包装器的成员函数的 c++ const-ness

带有 const 函数的 C++ 线程安全

"CONST func(arg);" 是啥意思在C语言中是啥意思?

execv() 和 const-ness

模板化的数学函数应该采用值还是 const 引用?