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

时间:2011-07-28 12:45:31

标签: c const-correctness

在这里寻求一些建议。

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

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吗?

2 个答案:

答案 0 :(得分:6)

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

答案 1 :(得分:1)

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