Функция доступа, принимающая const arg, но возвращающая неконстантный указатель в C - PullRequest
1 голос
/ 28 июля 2011

обращаюсь за советом.

У меня есть структура, которая содержит указатель на другую структуру, что-то вроде этого:

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 ]

6 голосов
/ 28 июля 2011

Это абсолютно нормально, и это правильно указывает на ваше заявленное намерение.

1 голос
/ 28 июля 2011

Кроме того, даже если пользователю легко изменить структуру, все равно будет полезно использовать const, поскольку это поможет компилятору оптимизировать код в функции.Компилятор будет знать, что ему никогда не нужно изменять структуру внутри функции.

...